关于网络socket句柄的释放问题,请高手指点,感激不尽

liangyuwei_78 2008-09-23 05:27:27
void __fastcall T_NetModel::ClientSocketConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Panel->Color = clLime;
Timer->Enabled = false ;
}
//---------------------------------------------------------------------------

void __fastcall T_NetModel::ClientSocketDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Timer->Enabled = true ;
}
//---------------------------------------------------------------------------

void __fastcall T_NetModel::ClientSocketError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
Timer->Enabled = true ;
ErrorCode = 0 ;
}
//---------------------------------------------------------------------------

void __fastcall T_NetModel::TimerTimer(TObject *Sender)
{
if(!ClientSocket->Active )
{
Panel->Color = clRed;
ClientSocket->Open() ;
}
else
{
Panel->Color = clLime;
}
}

以上代代码,过一段时间会提示缓冲区满错误,并在任务管理器的句柄数一列会不断增加句柄数量,由此可见是因为socket句柄没有释放的原因,请那位指教指教,如何释放socket句柄。谢谢
...全文
981 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
痞子酷 2009-01-13
  • 打赏
  • 举报
回复

void __fastcall T_NetModel::ClientSocketDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Timer->Enabled = true ;
Socket-->Close();关闭客户端连接

}
bluecent 2008-12-02
  • 打赏
  • 举报
回复
做成线程就可以
痞子酷 2008-11-06
  • 打赏
  • 举报
回复
void __fastcall T_NetModel::ClientSocketDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Timer->Enabled = true ;
}

-----------------------
关闭客户端连接
Socket-->Close();
shzqiang 2008-10-14
  • 打赏
  • 举报
回复
在窗口析构函数写
if(ClientSocket->Active)
{
ClientSocket->Close();
}
试试看
yuanreid 2008-10-14
  • 打赏
  • 举报
回复
LZ可以使用netstat命令查看一下你的端口数量是否增加,端口的状态是否未关闭,如果是,可以在断开连接处显式的关闭一下。
yumikoo 2008-10-14
  • 打赏
  • 举报
回复
把Timer的时间间隔调长点试试
joy200699 2008-10-08
  • 打赏
  • 举报
回复
支持
liangyuwei_78 2008-09-23
  • 打赏
  • 举报
回复
但确实出现了缓冲区满而使程序崩溃的现象
僵哥 2008-09-23
  • 打赏
  • 举报
回复
任务管理器看到的句柄数增量不一定是socket描述符增加而产生的句柄.

1,317

社区成员

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

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