怎样简单检测socket的健康状态
吴旻
泰岩网络工作室
开发程序经常用到socket,新手熟手一般都会用select、recv和send这样几个函数,而且大多数情况下,会用这几个函数也就差不多了。更深入的开发会发现,现成的socket函数并没有提供检测socket是否健康的函数,通常的资料也并没有现成的方法可用。本文提供了一个方案,在windows和linux下初步测试,效果良好。
必须先声明的是socket通信是双工的(如果读者对此不了解,可先查一下相关资料)。因此socket的健康状态是分两个方向的,一个是你发送(send)的方向,一个是你接收(recv)方向的。只有两个方向都是关闭的,这个socket才是真正关闭的,也只有这两个方向都是健康的,此socket才是真正健康的。真正难以检测的,其实就是这种半健康状态的socket。当然我们也可以认为,如果我们两个方向的状态都可以检测清楚,那么此socket的健康状态我们自然就清楚了。
好了,先认识一下上面提到的三个函数返回值的含义。
| 函数名 |
返回值 |

本文介绍了如何检测socket的健康状态,包括发送(send)和接收(recv)两个方向。发送方向的健康通常由程序员控制,而接收方向的健康可以通过select和recv结合使用进行检测。recv的MSG_PEEK选项可用于查看缓冲区状态而不移除数据。通过getsockname/ getpeername检查发送方向,select和recv(,,1,MSG_PEEK)检测接收方向,从而判断socket的健康状况。"
123408636,11662553,Linux Shell中的管道通信与重定向:dup2函数实践,"['Linux系统', 'shell脚本', '进程通信', '文件重定向']

432

被折叠的 条评论
为什么被折叠?



