首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Linux:是否存在带超时的read或recv from socket?

Linux:是否存在带超时的read或recv from socket?
EN

Stack Overflow用户
提问于 2010-05-21 00:55:27
回答 3查看 162.4K关注 0票数 116

如何尝试从带超时的套接字中读取数据?我知道,select、pselect、poll都有一个超时字段,但是使用它们会禁用tcp reno堆栈中的"tcp fast-path“。

我唯一的想法是在循环中使用recv(fd,...,MSG_DONTWAIT

EN

回答 3

Stack Overflow用户

发布于 2015-09-30 01:14:41

下面是在C中使用pollrecv函数添加超时的一些简单代码:

代码语言:javascript
复制
struct pollfd fd;
int ret;

fd.fd = mySocket; // your socket handler 
fd.events = POLLIN;
ret = poll(&fd, 1, 1000); // 1 second for timeout
switch (ret) {
    case -1:
        // Error
        break;
    case 0:
        // Timeout 
        break;
    default:
        recv(mySocket,buf,sizeof(buf), 0); // get your data
        break;
}
票数 27
EN

Stack Overflow用户

发布于 2010-05-21 09:11:52

安装SIGALRM处理程序,然后在常规阻塞recv()之前使用alarm()ualarm()。如果警报响起,recv()将返回一个错误,并将errno设置为EINTR

票数 1
EN

Stack Overflow用户

发布于 2018-04-04 14:08:05

//在WINDOWS的绑定操作之后也可以工作

代码语言:javascript
复制
DWORD timeout = timeout_in_seconds * 1000;
setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof timeout);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2876024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档