WSAAsyncSelect 服务端若发送数据,客户端退出,服务能fd_close 没反应

tan625747 2010-03-10 08:16:40
WSAAsyncSelect 服务端若发送数据,客户端退出,服务能大多少数情况fd_close 没反应

若服务端不发送数据到客户端,客户端退出,服务端fd_close 能收到信息

这个怎么调试呀
...全文
231 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tan625747 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 missye1437 的回复:]

或者你可以开启一个线程。

每分钟检查一次 保存的套接字的可用信。

例如 你记录了10个客户端,就循环十次。 如果发送不出信息给他的,就是掉线的。
[/Quote]

上面的不好实现
yize.link 2010-03-12
  • 打赏
  • 举报
回复
或者你可以开启一个线程。

每分钟检查一次 保存的套接字的可用信。

例如 你记录了10个客户端,就循环十次。 如果发送不出信息给他的,就是掉线的。
TRUE 2010-03-12
  • 打赏
  • 举报
回复
这个使用,应该是TCP协议里面的有个超时的设置,你设置一下超时的大小。
tan625747 2010-03-11
  • 打赏
  • 举报
回复
谢了

楼上有QQ吗


这些例子都很了解了 这个例子,没有向客户端发送数据。

如果把服务端向客户端发送数据注释掉,调试发现,只要客户端退出,服务端就能收到fd_close 执行

如是服务端向客户端发送数据 客户端退出 服务端 %90的情况是不能收到fd_close



今天查资料看到
http://topic.csdn.net/u/20070316/15/d70fccb0-e83a-40a3-a2c0-854d60813082.html


这有句话

.这种情况通常是连接的一方客户端(服务器端),close连接后;连接的另一方服务器端(客户端)的socket发送缓冲区里边还有“未确认”的数据,导致服务器端的tcp协议栈会重新发送这些数据;然而客户端socket对方已经关闭了,并且丢弃了它的socket接受缓冲区的数据。导致服务器端的tcp协议栈向上层应用返回 10053错误。 如果你这个时候用wireshark抓一下包,应该会看到客户端可能会发送一个tcp rst分段过来!怎么样解决close的时候数据丢失就是另外一个话题了

可能是服务端向客户端的 发送缓冲区里边还有“未确认”的数据 ,所以客户端退出,服务端fd_close 大多数情形没有反应


现在我要修复这个bug ,服务端向客户端发送数据,只要客户端退出,服务端fd_close 能执行。这个怎么做呀?
sun007700 2010-03-11
  • 打赏
  • 举报
回复
[转]Windows Socket五种IO模型(上)
http://hi.baidu.com/huhe/blog/item/f9328db1a803d65008230266.html

看一下第二种

异步选择模型

是怎么处理的

18,356

社区成员

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

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