怎样判断socket断开并自动重连

怎样判断socket断开并自动重连,第1张

1. 根据ERRNO和recv结果进行判断

在UNIX/LINUX下,非阻塞模式SOCKET可以采用recv+MSG_PEEK的方式进行判断,其中MSG_PEEK保证了仅仅进行状态判断,而不影响数据接收

对于主动关闭的SOCKET, recv返回-1,而且errno被置为9(#define EBADF 9 /* Bad file number */)或104 (#define ECONNRESET 104 /* Connection reset by peer */)

对于被动关闭的SOCKET,recv返回0,而且errno被置为11(#define EWOULDBLOCK EAGAIN /* Operation would block */)

对正常的SOCKET, 如果有接收数据,则返回>0, 否则返回-1,而且errno被置为11(#define EWOULDBLOCK EAGAIN /* Operation would block */)

因此对于简单的状态判断(不过多考虑异常情况):

recv返回>0, 正常

我给你再回答详细点:客户端或服务器接收到的客户端:socket有系统超时时间,现有所有系统一般是30秒到2分钟;应用可以把超时时间再设小。如果过了超时时间,还读取不到数据或发送不了数据。就会返回connected time out错误。socket的链接函数会返回,会自动关闭链接。超时时间内,会有N次重试,一般是系统平台在管理。应用级的重连机制需要应用程序实现。对服务器端,监听类型的socket(服务类的socket),不管网络断不断,一直会有效。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8708418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存