gpt4 book ai didi

c - 如何接受超时套接字

转载 作者:IT王子 更新时间:2023-10-29 01:22:32 27 4
gpt4 key购买 nike

是否有超时跨平台解决方案来接受客户端使用 accept 函数而不将套接字设置为非阻塞?

我知道我应该使用 select 函数,但我做错了什么?

SOCKET NativesAcceptClient(SOCKET s, int timeout)
{
int iResult;
struct timeval tv;
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(s, &rfds);

tv.tv_sec = (long)timeout;
tv.tv_usec = 0;

iResult = select(s, &rfds, (fd_set *) 0, (fd_set *) 0, &tv);
if(iResult > 0)
{
return accept(s, NULL, NULL);
}
else
{
//always here, even if i connect from another application
}
return 0;
}

如何解决?谢谢!

最佳答案

select 调用的第一个参数应该等于 fd_set 集合中最大的文件描述符号加 1(参见 here)。尝试将第一个参数更改为 s+1;当您的设备中有多个 socket 时,您将需要添加一些逻辑。

关于c - 如何接受超时套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14045064/

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