该程序有时候可以整天正常工作运行,但某些天又会出现如上问题,就是客户端会突然recv出错而退出,但是服务器端连接在此客户端上的socket却继续正常工作,丝毫没有发觉客户端已退出,检查代码本身也没发现问题。
客户端与服务器端分别位于不同的网段,现怀疑是网络的问题,或者说是防火墙的问题。不过本人对网络/防火墙不是很了解,希望懂的xdjm们帮忙推敲推敲,防火墙会不会让客户端的socket读操作失败,但却让服务器端不察觉socket这个问题而继续工作下去(服务器端的一个定时器会每隔几秒去读写一下socket)?
客户端与服务器端分别位于不同的网段,现怀疑是网络的问题,或者说是防火墙的问题。不过本人对网络/防火墙不是很了解,希望懂的xdjm们帮忙推敲推敲,防火墙会不会让客户端的socket读操作失败,但却让服务器端不察觉socket这个问题而继续工作下去(服务器端的一个定时器会每隔几秒去读写一下socket)?
如果客户端socket以非正常方式(非优雅方式)退出,服务器端的socket还能正常工作(recv)吗?
这有什么奇怪,网络异常和其它异常造成了socket非正常断开,服务器端是不能实时知道已断开的,这种情况下,只能靠超时机制或keepalive机制,基本都是大同小异,反正在一定时间内客户端和服务器端没有任何数据通讯,就以socket断开处理。