您的位置:首页 > 其它

EasyIocp - 勘误

2014-07-13 14:49 260 查看
EayIocp有更改会在这里列出日志,建议大家去这里下载最新代码。

1)2014年7月4日 - 意外关闭监听套接字的bug

    CSDN网友kkia进行了如下操作:“试了下
,服务端正常开启,客户端把sendMessage发送数据注释掉,然后编译运行,此时客户端程序停留在recv函数处,到现在一切正常,但是点击客户端窗口的关闭后,服务端的线程全部退出了。。。也就是崩溃了,我刚接触到这个,也不知道什么原因。”。

    我自己尝试了一下EasyIocp输出如下图。WSAGetLastError给出错误消息如下:

   


    错误原因是关闭客户端时,EasyIocpError::DealCompletionError函数处理错误ERROR_NETNAME_DELETED(ErrorCode = 64),此时调用EasyClients::RemoveClient函数时关闭了套接字,而此套接字是监听套接字,然后造成了(ErrorCode=995)的错误消息。此bug在于EasyClients::RemoveClient实现有问题,不应该一开始就调用closesocket,而是应该查找是否有此客户端若有才进行清理操作

    函数EasyClients::DealCompletionError未区分出现错误的套接字是监听套接字,还是数据传输套接字,而是简单的对他们进行统一处理。若需要更详细的处理错误,可以在此函数中调用CompletionKey::GetKeyType获得套接字类型,根据监听套接字或是数据传输套接字进行错误处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iocp socket windows bug