奇怪!监听套接字在运行较长时间后 accept出现10038(WSAENOTSOCK)错误?望高手赐教! (200分)

  • 主题发起人 主题发起人 wnjer
  • 开始时间 开始时间
W

wnjer

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,长时间运行后(如2天),accept出现10038错误,客户端连接出现10061错误。
运行环境:win2000 professional sp4
代码:
while (not Terminated) do
begin
FillChar(soin, sizeof(SockAddr_in), 0);
slen := sizeof(SockAddr_in);
newSocket := WinSock.accept(ServerSocket, @soin, @slen);
if newSocket = INVALID_SOCKET then //出现10038错误??
begin
OutputDebugString(PChar('socks accept err:' + IntToStr(WSAGetlastError())));
Sleep(5);
continue; //忽略,继续
end;
NewClient(newSocket, soin);
newSocket := 0;
end; //while
 
[:(]有没有人遇到过同样问题呀!
 
[red]是不是被拒绝服务攻击了呀![/red]
 
估计是响应不过来的原因,当有大量连接请求同时到达,会出现的
 
10038 = 在一个非套接字上尝试了一个操作。
 
是呀,为什么会变成非套接字了呢,我并没有关闭这个套接字呀。
 
你可以在命令行方式下输入netstat -a -p tcp看看,你的打开的连接太多,
很多死连接没有关闭,导致出现10038错误。
建议:
关掉所有的死连接。
 
谢谢各位!
to 张无忌:
我也怀疑是因为连接太多,但我怎么才能关闭那些“死连接”呢(如何判断?),因我的服务会接收大量连接,如何避免这种情况呢?

非常感谢!
 
加握手,一段时间没有反应了就关闭
 
accept出现10038错误,客户端连接出现10061错误。
以上两个数定不是端口而是错误代码, 请楼主注意,
应该是连接池没有释放的问题了
 
我遇到過,當有很多用戶都在啟用時,服務端響應不過應來就會造成。
 
啊,谢谢各位!虽然我还没找到一个好的解决办法,但该结贴了。
 
多人接受答案了。
 
后退
顶部