我查了下,win下掉了,recv很快就会返回,这时知道掉线。
但linux下,如果拨了网线recv不返回,send也是成功。
直到缓冲区满了,才知道掉线了,,,但这么久才知道掉线,那sndbuf的数据就丢了,,,
但linux下,如果拨了网线recv不返回,send也是成功。
直到缓冲区满了,才知道掉线了,,,但这么久才知道掉线,那sndbuf的数据就丢了,,,
解决方案 »
- VC++ win32 Application程序实现运行时,右下角任务栏,弹出气泡提示程序已开始运行
- 请教使用opencv识别害虫的方法
- 关于一种限定的程序
- 标准消息的理解,求指错
- 好奇怪呀,界面出不来了,帮我看看!
- wprintf()什么都没有输出?
- 用软件得到www.sohu.com的ip是但是打不开,为什么?http://61.135.131.180:80
- 有谁知道串口接收数据的机制吗
- 后台运行的程序怎样获得当前窗口的消息?
- 在TabCtrl对象中动态创建一个BUTTON(父窗口为TabCtrl对象),但是MAP的ON_BN_CLICKED (IDC_PUSHBUTTON, OnButtonClicked)消息却没有响应,为什么?
- VS2013/2010中怎么配置DUILIB界面库
- ListCtrl选中一行变色
按照你认为掉线的时长
MSG_WAITALL The receive request will complete only when one of the following events occurs:The buffer supplied by the caller is completely full.
The connection has been closed. 好像是连接断开了就返回这个值MSG_WAITALL
The request has been canceled.
Note that if the underlying transport does not support MSG_WAITALL, or if the socket is in a non-blocking mode, then this call will fail with WSAEOPNOTSUPP. Also, if MSG_WAITALL is specified along with MSG_OOB, MSG_PEEK, or MSG_PARTIAL, then this call will fail with WSAEOPNOTSUPP. This flag is not supported on datagram sockets or message-oriented CO sockets.
谢谢你认真看了我的问题!你说socket断开时recv返回-1,在win下是这样的,我也是那么处理,很可靠。
但是linux下不管用了,也就是说非正断开连接后,recv不返回!
谢谢你认真看了我的问题!你说socket断开时recv返回-1,在win下是这样的,我也是那么处理,很可靠。
但是linux下不管用了,也就是说非正断开连接后,recv不返回!
跟开发服务器方协商一些,定制心跳包检测机制
对于发送方,如果心跳发不出去,说明连接断了;
对于接收方,如果在一个周期(通常大于一个周期)内还没收到心跳,说明连接断了;
1、当本机网线断开时,客户端会立即收到OnClose事件
2、当网络正常连接在交换机上,而服务端异常断开,OnClose事件会延迟发生
正常断开,nErrorCode 返回0,非正常断开时,返回一个错误代码-1。
TCP在连接建立后底层有一个“心跳”,如果你直接监视TCP的心跳包,可能知道与服务端的连接状态,但可能涉及到低级编程我也未做过。
更多信息请参看:
http://www.itye.org/archives/1282