一、 SO_RCVTIMEO和SO_SNDTIMEO套接口选项说明
1. 这两个选项给套接字的接收和发送设置一个超时值。注意,访问函数的参数是指向timeval结构的指针。
2. 通过设置值为0秒和0微秒禁止超时。缺省情况下,两个超时都是禁止的。
二、 SO_RCVTIMEO的正确使用方法
1. 获取接收的超时值
socklen_t optlen = sizeof(struct timeval);
struct timeval tv;
getsockopt(socketfd, SOL_SOCKET,SO_RCVTIMEO, &tv, &optlen);
2. 设置接收的超时值
socklen_t optlen = sizeof(struct timeval);
struct timeval tv;
tv.tv_sec = 10; tv.tv_usec = 0;
setsockopt(socketfd, SOL_SOCKET, SO_RCVTIMEO, &tv, optlen);
补充:
SO_SNDTIMEO的获取和设置与SO_RCVTIMEO的类似。
在使用的过程中要检查getsockopt和setsockopt函数的返回值,0表示成功,-1表示失败。
一个新创建的socket默认是阻塞的,就可以通过设置超时来获得返回,因为默认的socket发送和接收的超时timeval的两个成员tv_sec和tv_usec都是0,表明永不超时。