如何避免强制结束进程引发的socket 10053错误(补充)
主要使用控件ServerSocket和ClientSocket。
简单的聊天程序:客户端登录->服务端添加用户列表;客户端退出->服务端删除该用户信息。一般情况下一切正常,但如果客户端登录后被任务管理器强制结束进程的话,服务端报10053错误,且不会删除该用户信息,导致其他用户认为该用户仍然在线。
任务管理器强制结束进程时好像不会触发程序的任何事件,那么在这种情况下如何捕获并进行相应的离线处理呢。
简化程序片段:
void __fastcall TFormMain::N1Click(TObject *Sender)
{
if (!ClientSocket1->Active)
ClientSocket1->Active = true;
ClientSocket1->Socket->SendText("ok");
}
void __fastcall TFormMain::N2Click(TObject *Sender)
{
ShowMessage(ServerSocket1->Socket->ActiveConnections);
}
正常情况下,可以返回正确的登录用户总数,强制结束后ActiveConnections不会减少,弹出10053错误。
[解决办法]
在onError里去做判断
如果ErrorCode是10053
那么关闭socket 并且ClientSokcet->Close()