请教一个重叠io网络模型关闭的问题

lougd 2015-04-23 10:18:51
用重叠io网络模型开发的服务器,通过WSASocket创建了一个异步的raw socket,然后在往这个socket投递多个异步的recv请求,当关闭这个服务器的时候将这个socket用closesocket关闭掉,问题就出现了,经常只有部分的recv请求返回错误,比如在这个socket上成功投递了60个异步的recv请求,但是closesocket后只有54 recv请求返回错误,请问这种情况正常吗?
...全文
244 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Unix_Architect 2015-05-16
  • 打赏
  • 举报
回复
引用 10 楼 lovejingtao 的回复:
这个不是你程序的问题,IOCP一样有这种问题。这个是WINODWS的内核有BUG,自旋锁问题。 其实,说不返回是不正确的,MSDN也说了,“closesocket会导致已经投递的请求返回,但不一定是马上返回”,具体自己去看吧。 根据我的测试,一旦不返回,有时候,closesocket 后,有时是20分钟后返回,有时候是2天,说不准。
我看了另外一个讨论的帖子,是不是讨论的内容就是closesocket之后,按理说在IOCP上未决的WSASend和WSAWrite会返回啊?但是这个返回不一定是什么时候返回,如果正常的话可能很快就返回了。
worldy 2015-04-23
  • 打赏
  • 举报
回复
有些请求可能在关闭的时候就返回了?
lovejingtao 2015-04-23
  • 打赏
  • 举报
回复
另外不要迷信网上的所谓文章,那些人基本都是copy的。拿个最简单的AcceptEx函数来说,全世界的中文IOCP文章都冰天雪地裸体跪求你使用,说是提高连接量的关键,但实际上这个函数会导致系统死机、蓝屏之类。 1、如果你搜索IOCP+AcceptEx,看到的都是各种大神推荐你使用。没有一篇文章说有问题。绝对没有一篇。 2、如果你搜索“m_Win32DisableAcceptEx“,就会发现这个函数会导致系统死机、蓝屏。这个参数是APCHA服务器的配置参数,因为APCHA服务器发现使用了这个函数,在很多服务器就会有死机、蓝屏等现象,所以提供了这个INI参数给用户禁用这个函数。 如果是一般程序员,说这函数有问题,我敢说,网上99%的人都叫你检查自己的代码,是你代码问题。但面对APCHA服务器,这些人估计马上失声。因为很多程序员就是这么屌的,有盲目崇拜的倾向。就好像别人如果拍的照片很好看,他一定会问你用什么牌子的照相机。因为他总爱把别人的成功归结于外部原因,而把自己的成功归结为努力。
lovejingtao 2015-04-23
  • 打赏
  • 举报
回复
这个不是你程序的问题,IOCP一样有这种问题。这个是WINODWS的内核有BUG,自旋锁问题。 其实,说不返回是不正确的,MSDN也说了,“closesocket会导致已经投递的请求返回,但不一定是马上返回”,具体自己去看吧。 根据我的测试,一旦不返回,有时候,closesocket 后,有时是20分钟后返回,有时候是2天,说不准。
lovejingtao 2015-04-23
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390931471
lougd 2015-04-23
  • 打赏
  • 举报
回复
引用 8 楼 worldy 的回复:
LZ干吗不直接使用IOCP,Overlap有点像鸡肋
我这只是做raw嗅探,重叠io网络模型足够了。
worldy 2015-04-23
  • 打赏
  • 举报
回复
LZ干吗不直接使用IOCP,Overlap有点像鸡肋
lougd 2015-04-23
  • 打赏
  • 举报
回复
不会啊。
引用 6 楼 worldy 的回复:
[quote=引用 3 楼 u011391040 的回复:] [quote=引用 2 楼 worldy 的回复:] 有些请求可能在关闭的时候就返回了?
什么意思?[/quote] 说的不够清楚,是不是 有些请求可能在被你关闭的之前就已经返回了,所以你数返回就少了一些?[/quote] 应该不会啊。 每个recv请求返回错误的或者投递错误我都记下了,最后数量对不上。
worldy 2015-04-23
  • 打赏
  • 举报
回复
引用 3 楼 u011391040 的回复:
[quote=引用 2 楼 worldy 的回复:] 有些请求可能在关闭的时候就返回了?
什么意思?[/quote] 说的不够清楚,是不是 有些请求可能在被你关闭的之前就已经返回了,所以你数返回就少了一些?
lougd 2015-04-23
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
有些请求可能在关闭的时候就返回了?
正常情况下socket关闭这个socket投递的所有请求都应该返回对吗?
lougd 2015-04-23
  • 打赏
  • 举报
回复
引用 1 楼 lovejingtao 的回复:
http://bbs.csdn.net/topics/390931471
恩。 对啊。 closesocket后大部分已投递的recv请求都会返回,但经常不是全部的请求。
lougd 2015-04-23
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
有些请求可能在关闭的时候就返回了?
什么意思?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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