| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1145 人关注过本帖
标题:setsockopt写法正确吗?
只看楼主 加入收藏
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
回复 10楼 吹水佬
#define  SOL_SOCKET  65535  && 1也没用
#define SO_REUSEADDR   0x0004
#define SO_SNDBUF       7
#define SO_RCVBUF       8

optval= REPLICATE(0h00,4)
?setsockopt( this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR ,bintoc(1,"4rs")  , 4) &&
? this.obJECT.SocketHandle,WSAGetLastError()
?getsockopt(this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR,@optval, 4),optval
?WSAGetLastError()
?getsockopt(this.obJECT.SocketHandle,SOL_SOCKET,SO_RCVBUF,@optval,4),optval

返回:
0
1376,0
-1
0
-1

[此贴子已经被作者于2023-9-1 15:01编辑过]

2023-09-01 10:42
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
if getsockopt(this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR,@optval, 4) == -1
    ? WSAGetLastError()
endif
2023-09-01 21:28
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
以下是引用吹水佬在2023-9-1 21:28:42的发言:

if getsockopt(this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR,@optval, 4) == -1
    ? WSAGetLastError()
endif



WSAGetLastError() 返回0
2023-09-02 11:31
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用ljb8864在2023-9-2 11:31:46的发言:

WSAGetLastError() 返回0

可能不只是get.....的问题,往前找是不是也有异常的地方。
2023-09-02 17:08
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
以下是引用吹水佬在2023-9-2 17:08:28的发言:


可能不只是get.....的问题,往前找是不是也有异常的地方。




DECLARE LONG WSAGetLastError IN "Ws2_32"
DECLARE LONG  setsockopt IN "Ws2_32"  s long,level long,optname long ,optval long,optlen long
DECLARE LONG  getsockopt IN "Ws2_32" long s ,long level,long optname ,string @optval ,long optlen

#define SOL_SOCKET 1
#define SO_REUSEADDR 0x0004
 
#define SO_SNDBUF       7
#define SO_RCVBUF       8

Thisform.tcpServer.LocalPort = 1001
Thisform.tcpServer.Listen

optval= REPLICATE(0h00,4)


iok=getsockopt(this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR,@optval, 4)
?iok,"ok"
if iok== -1
    MESSAGEBOX( WSAGetLastError() )
endif
2023-09-02 17:32
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
getsockopt声明是不是有问题?
原型:
int getsockopt(
  [in]      SOCKET s,
  [in]      int    level,
  [in]      int    optname,
  [out]     char   *optval,
  [in, out] int    *optlen
);
注意:optlen 是in/out(输入/输出)的int*(整型指针)类型
2023-09-02 17:53
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
回复 16楼 吹水佬
optlen=4
optval= REPLICATE(0h00,4)
?setsockopt( this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR ,bintoc(1,"4rs")  , @optlen) &&
? this.obJECT.SocketHandle,WSAGetLastError()
?getsockopt(this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR,@optval, @optlen),optval,WSAGetLastError()

这句子可以
-----------------

但下面的设置接收缓存不行,是不是UDP不能设置
optval= 0h00200000
optlen=LEN(optval)
?setsockopt(this.obJECT.SocketHandle,SOL_SOCKET,SO_RCVBUF,@optval,@optlen)
?getsockopt(this.obJECT.SocketHandle,SOL_SOCKET,SO_RCVBUF,@optval,@optlen),optval
2023-09-04 09:32
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
回复 17楼 ljb8864
不清楚 DECLARE - DLL 具体情况
要注意的是:不同的参数类型 DECLARE - DLL 声明也不同
2023-09-04 21:32
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
以下是引用吹水佬在2023-9-4 21:32:37的发言:

不清楚 DECLARE - DLL 具体情况
要注意的是:不同的参数类型 DECLARE - DLL 声明也不同




DECLARE LONG  setsockopt IN "Ws2_32" long s ,long level,long optname ,string @optval ,long @optlen  &&"wsock32.dll"
DECLARE LONG  getsockopt IN "Ws2_32" long s ,long level,long optname ,string @optval ,long @optlen&&"wsock32.dll"
DECLARE LONG WSAGetLastError IN "Ws2_32"

#define  SOL_SOCKET  65535

#define SO_SNDBUF       7
#define SO_RCVBUF       8

optval=  0h00200000
optlen= len(optval)
?setsockopt(this.obJECT.SocketHandle,SOL_SOCKET,SO_RCVBUF,@optval,@optlen)
?getsockopt(this.obJECT.SocketHandle,SOL_SOCKET,SO_RCVBUF,@optval,@optlen),optval
2023-09-05 14:14
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
DECLARE LONG  setsockopt IN "Ws2_32" long s ,long level,long optname ,string @optval ,long optlen
DECLARE LONG  getsockopt IN "Ws2_32" long s ,long level,long optname ,string @optval ,long @optlen

setsockopt(this.obJECT.SocketHandle,SOL_SOCKET,SO_RCVBUF,@optval,optlen)
getsockopt(this.obJECT.SocketHandle,SOL_SOCKET,SO_RCVBUF,@optval,@optlen)
2023-09-05 22:02
快速回复:setsockopt写法正确吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021995 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved