gpt4 book ai didi

c - 用C语言中的select实现UDP套接字

转载 作者:行者123 更新时间:2023-11-30 14:20:18 28 4
gpt4 key购买 nike

我正在用 C 实现一个套接字编程项目。我使用 select() 来等待来自客户端的数据。我有两个 UDP 套接字,select() 总是忽略我的其中一个套接字。

有人可以简要描述一下我应该从哪里开始寻找它吗?这就是我的服务器正在做的事情

waitThreshold.tv_sec = 5000; 
waitThreshold.tv_usec = 50;
if (sd > sd1)
max_sd = (sd + 1);
else if(sd1 > sd)
max_sd = (sd1 + 1);
FD_ZERO(&read_sds);
FD_SET(sd, &read_sds);
FD_SET(sd1, &read_sds);

ret = select(max_sd, &read_sds, NULL, NULL, &waitThreshold);
if (ret < 0) {
printf("\nSelect thrown an exception\n");
return 0;
} else if (FD_ISSET(sd, &read_sds)) {
// code for socket one
} else if (FD_ISSET(sd1, &read_sds)) {
// code for socket two
}

最佳答案

您必须在每次迭代后进行设置和重置

if(sd > sd1)    
max_sd = (sd + 1);
else if(sd1 > sd)
max_sd = (sd1 + 1);
//some code
while(1){
waitThreshold.tv_sec = 5000;
waitThreshold.tv_usec = 50;
FD_ZERO(&read_sds);
FD_SET(sd, &read_sds);
FD_SET(sd1, &read_sds);
ret = select(max_sd, &read_sds, NULL, NULL, &waitThreshold);
if(ret <0)
{
printf("\nSelect thrown an exception\n");
return 0;
}
else if(FD_ISSET(sd, &read_sds))
{ // code for socket one }
else if(FD_ISSET(sd1, &read_sds))
{ // code for socket two }</pre></code>
}

现在它将解决您的问题。

关于c - 用C语言中的select实现UDP套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15592089/

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