读书人

Socket 缓冲区空间不足,该如何解决

发布时间: 2012-02-24 16:30:38 作者: rapoo

Socket 缓冲区空间不足
因为 我的 客户端 要 实时的 与 服务器端 进行数据传输

所以使用Timer写了个 客户端自动连接服务器的 方法

但是当客户端在使用(ClientSocket.Open)到第3900-4000次之后 就会报

'Windows Socket error:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。(10055),On API 'Connect''.

请高手帮忙解决一下啊!

[解决办法]
客户端连了不再释放的?
什么配置的机器?每个连接是要占一定内存开销的
[解决办法]
你刚open没关闭和释放吧
[解决办法]
估计就是在Timer事件写了:
Client := TClientsocket.Create...
Client...
Client.Open

...
忘了写Client.Free

然后运行一段时间,系统资源不够,就出现这错误了。
[解决办法]
如果是连接失败,然后重复尝试连接的话,可以在onerror事件里加入以下代码:
ErrorCode := 0;
Socket.Close;//这里吧socket关闭释放句柄资源
[解决办法]
在 ClientSocket 的OnLookup事件里,调整Socket的参数 (uses WinSock):
procedure TForm1.ClientSocket1Lookup(Sender: TObject;
Socket: TCustomWinSocket);
var
Bo_Dontlinger : BOOL;
begin
Bo_Dontlinger := True;
SetSockOpt(Socket.SocketHandle, SOL_SOCKET, SO_DONTLINGER, @Bo_Dontlinger, sizeof(BOOL));
end;

[解决办法]
楼上方法正确

读书人网 >.NET

热点推荐