有时我们可以调用套接字函数connect去连接远端IP设备的IP和端口,去检查远端IP设备是否在线,比如我们在系统中添加设备(包含IP和端口等信息)时,可以添加一个测试按钮,测试设备是否在线。使用默认的阻塞式的套接字去connect,如果设备不在线或者网络不通(也可能是添加的设备IP或端口有误),即设备一直连不上,connect则会一直在连接,会阻塞75秒超时后,connect函数会返回连接失败。这会导致软件直接堵塞在connect函数调用处,显然是不能容忍的,也是不合理的。针对这种场景,我们可以使用非阻塞式套接字加select函数判断,很好的实现短时间的超时控制,从而快速地判断出设备是否在线,而不会产生长时间的堵塞。
1、查看相关函数说明,搞清楚非阻塞式套接字、connect函数和select函数结合起来去实现超时控制的方法
对于tcp套接字,我们需要调用套接字函数connect去建立TCP连接。我们先来看看微软MSDN上对套接字接口connect的描述:
int WSAAPI connect(
[in] SOCKET s,
[in] const sockaddr *name,
[in] int namelen
);