Linux下socket发送接收超时值的获取与设置

一、 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,表明永不超时。

你可能感兴趣的:(网络与无线通信)