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

本文详细介绍了SO_RCVTIMEO和SO_SNDTIMEO这两个套接口选项的功能及其正确使用方法,并提供了如何获取和设置超时值的具体步骤。此外,还解释了如何检查设置是否成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值