当前位置: 技术问答>linux和unix
socket 问题,在线等待!!!!!!!!!!!!!!!!!!!
来源: 互联网 发布时间:2015-04-24
本文导语: 我有两个程序,客户端的和服务端的。建立连接后,用服务端程序向客户端发送数据时(用send(),里面各种错误检查都有) 发送,突然关闭客户端,这时服务端的程序就没有反应了,好像一直在send()函数处阻塞,请...
我有两个程序,客户端的和服务端的。建立连接后,用服务端程序向客户端发送数据时(用send(),里面各种错误检查都有) 发送,突然关闭客户端,这时服务端的程序就没有反应了,好像一直在send()函数处阻塞,请问怎么从send()中返回啊
|
告诉楼主:如果你时通过函数把连接关闭了,发送端是能检测出来的;但如果你通过断网线或其他方法断开连接,发送端是检测不出来的。心跳测试可以很好的测试一个连接是否正常;select()函数也可以间接测试.共参考!
|
to wabc:
如果一个人没有心跳,。。。
如果对端应用没有心跳,也。。。
只是一种技术手段,因为TCP建立在不可靠的IP上,所以对路径上的情况不能做如何假设。当网络上任何地方出现问题时,TCP都无法知道,只能傻等。虽然有KEEPALIVE,但间隔太长。所以对关键应用,可以使用心跳技术。现在linux的socket应该是直接支持了心跳。
如果一个人没有心跳,。。。
如果对端应用没有心跳,也。。。
只是一种技术手段,因为TCP建立在不可靠的IP上,所以对路径上的情况不能做如何假设。当网络上任何地方出现问题时,TCP都无法知道,只能傻等。虽然有KEEPALIVE,但间隔太长。所以对关键应用,可以使用心跳技术。现在linux的socket应该是直接支持了心跳。
|
人为断开send当然会阻塞。只能自己加超时。
心跳(heartbeat)检测对你的这个问题没有什么帮助。只有超时从send退出之后心跳检测才有意义。
心跳(heartbeat)检测对你的这个问题没有什么帮助。只有超时从send退出之后心跳检测才有意义。
|
奇怪了,为什么我测试时,我想让send阻塞还阻塞不了了呢?
serv/cli一连通,我让接受端马上断开,但发送仍然能够发送数据?
serv/cli一连通,我让接受端马上断开,但发送仍然能够发送数据?
|
1.设置超时,超时后退出
2.使用心博函数定时检查客户端的health,出现异常后退出。
2.使用心博函数定时检查客户端的health,出现异常后退出。
|
应该有个监控线程,定期检查每个工作线程的状态。
上面所说的“心跳(heartbeat)”是什么啊
上面所说的“心跳(heartbeat)”是什么啊
|
有buffer。