gpt4 book ai didi

sockets - 如何防止接收套接字永远阻塞以防万一它没有接收到任何数据?

转载 作者:行者123 更新时间:2023-12-03 11:59:44 24 4
gpt4 key购买 nike

在阻塞UDP套接字的情况下,blocking on receive不会接收任何数据,也不会接收任何数据,因为发送者进程由于某种原因而崩溃了。
可以将套接字选项SO_RCVTIMEO设置为确保接收系统调用将返回,但是是否存在“已知方法”来解决该问题(因为超时的值不精确,并且取决于系统是否慢)或不)

最佳答案

您可以使用 select 函数知道可以在套接字上读取的内容。

while (1)
{
int retval;
fd_set rfds;
// one second timeout
struct timeval tv = {1,0};

FD_ZERO(&rfds);
FD_SET(fd, &rfds);

retval = select(1, &rfds, NULL, NULL, &tv);

if (retval == -1)
{
perror("select()");
exit(1);
}
else if (retval)
{
printf("Data is available now.\n");
// if recvfrom() is called here, it won't block
}
else
{
// no data to read... perform other tasks
}
}

关于sockets - 如何防止接收套接字永远阻塞以防万一它没有接收到任何数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40905134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com