window socket error 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作10055

konglongkill 2007-08-22 04:53:33
我用winsock2.cpp API 进行sock通信,走的是TCP协议

由于我要向远端进行连接,不断进行Connect。在多次连接后大约4000次重复的连接,因为对方没有开机。

出现了
Project TestServer.exe raisecd Exception class ESocketErr with message window socket error: 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作10055 On API Connect Process stopped.Use step or Run to continue.

每次在Connect后没有连接上,也会出现SockErr事件。

每次使用都DisConnect和Close了。
...全文
2528 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
僵哥 2007-08-24
  • 打赏
  • 举报
回复
楼上那个小坏蛋,好象好久不见了哦。
僵哥 2007-08-23
  • 打赏
  • 举报
回复
另外修改注册表键值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
MaxUserPort(REG_DWORD)=0x0000fffe
僵哥 2007-08-23
  • 打赏
  • 举报
回复
如果是使用的API,请在关闭套接字的时候使用如下方法关闭。
//强行关闭一个socket
void __fastcall ForceCloseSocket(SOCKET &s,bool bClose)
{
bool bDontLinger=false;
setsockopt(s,
SOL_SOCKET,
SO_DONTLINGER,
(char *)&bDontLinger,
sizeof(bool));

linger InternalLinger;
InternalLinger.l_onoff=1;
InternalLinger.l_linger=0;
setsockopt(s,
SOL_SOCKET,
SO_LINGER,
(const char*)&InternalLinger,
sizeof(linger));
if(bClose)
{
closesocket(s);
s=INVALID_SOCKET;
}
}
pp616 2007-08-23
  • 打赏
  • 举报
回复
TCustomWinSocket 也可以那么关。

TCustomWinSocket::SocketHandle就是Socket




void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
ForceCloseSocket((SOCKET)Socket->SocketHandle,true);
}
konglongkill 2007-08-23
  • 打赏
  • 举报
回复
如果我用的是TCustomWinSocket类对象模块呢!
TCustomWinSocket和SOCK不是同一个cpp文件。没有提供这个接口,怎么处理呢!
ERR0RC0DE 2007-08-22
  • 打赏
  • 举报
回复
打开任务管理器,到进程页
然后菜单->查看->选择列,将句柄计数选上。

然后查看该进程的句柄数,看看刚打开程序和出现那个异常有何区别。

一般这个错误是由于程序未释放相应资源引起的OS资源不足

一句话,你的程序有资源泄露。

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧