和 getsockopt(m_socket, SOL_SOCKET, SO_KEEPALIVE,(char*)&optval, &optlen);
连接还是未连接,返回值和optval都一样
怎么网上搜的都不靠谱啊
16 个解决方案
#1
getsockname试试 获取对端地址
一般查看是否连接使用心跳包
一般查看是否连接使用心跳包
#2
通过connect的返回值,可以知道连接,如果连接中断,recv会收到0字节
如果网络异常,有可能什么信息都得不到,需要做心跳处理
如果网络异常,有可能什么信息都得不到,需要做心跳处理
#3
我是希望每次发送前检查一下连接状况
所以不太想用心跳包
#4
为了保证连接一般使用“心跳”方式,保证通信双方连接,原因在与来自网络底层的断开消息反映比较慢。你使用语句判断时,对于本机硬件的连接可以马上返回状态,对于已经建立的TCP连接,通过抓包可以发现,底层连接也是使用心跳保证的,在多次发送心跳不应答后,才会发送断开消息,其间可能会有几秒的时差。也就是说,本机拔掉网线会马上反应,对方拔掉网线会延时反应。
还是自己程序中加入心跳比较好。
还是自己程序中加入心跳比较好。
#5
我是希望每次发送前检查一下连接状况
所以不太想用心跳包
上面点错引用了
#6
你觉得不靠谱,是因为你的要求基本属于不能实现的
#7
看起来还是要根据错误信息来处理才行了
#8
发送前检查连接的状态,为何不直接send利用返回值查看?
#9
如果没有别的方法就这样做最妥当了
#10
建议你使用CxClientSocket/CxServerSocket
http://www.cnblogs.com/EdmundDwyane/p/3248297.html http://www.cnblogs.com/EdmundDwyane/p/3248297.html
http://www.cnblogs.com/EdmundDwyane/p/3278641.html
http://www.cnblogs.com/EdmundDwyane/p/3248297.html http://www.cnblogs.com/EdmundDwyane/p/3248297.html
http://www.cnblogs.com/EdmundDwyane/p/3278641.html
#11
send返回值其实也不能说明问题。
只有心跳包机制能说明问题。
#12
都是心跳包,websocket也都是这么用的
#13
都是心跳包,websocket也都是这么用的
#14
都是心跳包,websocket也都是这么用的
#15
recv一下,立刻返回0说明已经断开了
#16
不过,最可靠的方法就是心跳包。
因为如果出现突然断电、拔掉网线这些情况只能通过心跳来判断别无他法
因为如果出现突然断电、拔掉网线这些情况只能通过心跳来判断别无他法
#1
getsockname试试 获取对端地址
一般查看是否连接使用心跳包
一般查看是否连接使用心跳包
#2
通过connect的返回值,可以知道连接,如果连接中断,recv会收到0字节
如果网络异常,有可能什么信息都得不到,需要做心跳处理
如果网络异常,有可能什么信息都得不到,需要做心跳处理
#3
我测试过 getsockopt(m_socket, SOL_SOCKET, SO_ERROR,(char*)&optval, &optlen);
和 getsockopt(m_socket, SOL_SOCKET, SO_KEEPALIVE,(char*)&optval, &optlen);
连接还是未连接,返回值和optval都一样
怎么网上搜的都不靠谱啊
我是希望每次发送前检查一下连接状况
所以不太想用心跳包
#4
为了保证连接一般使用“心跳”方式,保证通信双方连接,原因在与来自网络底层的断开消息反映比较慢。你使用语句判断时,对于本机硬件的连接可以马上返回状态,对于已经建立的TCP连接,通过抓包可以发现,底层连接也是使用心跳保证的,在多次发送心跳不应答后,才会发送断开消息,其间可能会有几秒的时差。也就是说,本机拔掉网线会马上反应,对方拔掉网线会延时反应。
还是自己程序中加入心跳比较好。
还是自己程序中加入心跳比较好。
#5
getsockname试试 获取对端地址
一般查看是否连接使用心跳包
通过connect的返回值,可以知道连接,如果连接中断,recv会收到0字节
如果网络异常,有可能什么信息都得不到,需要做心跳处理
我是希望每次发送前检查一下连接状况
所以不太想用心跳包
上面点错引用了
#6
你觉得不靠谱,是因为你的要求基本属于不能实现的
#7
为了保证连接一般使用“心跳”方式,保证通信双方连接,原因在与来自网络底层的断开消息反映比较慢。你使用语句判断时,对于本机硬件的连接可以马上返回状态,对于已经建立的TCP连接,通过抓包可以发现,底层连接也是使用心跳保证的,在多次发送心跳不应答后,才会发送断开消息,其间可能会有几秒的时差。也就是说,本机拔掉网线会马上反应,对方拔掉网线会延时反应。
还是自己程序中加入心跳比较好。
看起来还是要根据错误信息来处理才行了
#8
发送前检查连接的状态,为何不直接send利用返回值查看?
#9
发送前检查连接的状态,为何不直接send利用返回值查看?
如果没有别的方法就这样做最妥当了
#10
建议你使用CxClientSocket/CxServerSocket
http://www.cnblogs.com/EdmundDwyane/p/3248297.html http://www.cnblogs.com/EdmundDwyane/p/3248297.html
http://www.cnblogs.com/EdmundDwyane/p/3278641.html
http://www.cnblogs.com/EdmundDwyane/p/3248297.html http://www.cnblogs.com/EdmundDwyane/p/3248297.html
http://www.cnblogs.com/EdmundDwyane/p/3278641.html
#11
发送前检查连接的状态,为何不直接send利用返回值查看?
如果没有别的方法就这样做最妥当了
send返回值其实也不能说明问题。
只有心跳包机制能说明问题。
#12
都是心跳包,websocket也都是这么用的
#13
都是心跳包,websocket也都是这么用的
#14
都是心跳包,websocket也都是这么用的
#15
recv一下,立刻返回0说明已经断开了
#16
不过,最可靠的方法就是心跳包。
因为如果出现突然断电、拔掉网线这些情况只能通过心跳来判断别无他法
因为如果出现突然断电、拔掉网线这些情况只能通过心跳来判断别无他法