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获得套接字类型,根据监听套接字或是数据传输套接字进行错误处理。
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模型与网络编程
- Easy 13 Length of Last Word(58)
- easy_install与pip 区别
- Leetcode-标签为Tree的easy题目列表
- EASY_PAT_ADVANCED LEVEL 1008_简单的面向对象 队列的使用
- 2017年4月23日 448. Find All Numbers Disappeared in an Array[easy]
- RESTEasy文件上传,使用html form表格
- EasyDarwin直播是如何实现的快速显示视频的方法
- 一个IOCP例子
- Easy-4
- WeasyPrint - Converts HTML + CSS to PDF - WeasyPrint converts HTML/CSS documents to PDF
- Easy-16
- windows下 notepad++ + python3 + easy_install
- bzoj 2751: [HAOI2012]容易题(easy) 数学
- B - An easy problem
- Easy-34
- RESTEasy中的HTTP异步处理
- Easy : 122. Best Time to Buy and Sell Stock II
- 使用easy_install安装python第三方模块的方法
- HDU1040 As Easy As A+B【排序】