我正在一个UDP套接字上调用select()来查看是否有要读取的数据。每次方法返回-1并且errno设置为22(无效参数)。以下是我的部分代码:
fd_set sockets;
struct timeval alarm;
alarm.tv_sec = 0;
alarm.tv_usec = 1000;
FD_ZERO(&sockets);
FD_SET(udpSocket, &sockets);
maxfd = udpsocket + 1;
selected = select(maxfd, &sockets, NULL, NULL, &alarm);
printf("%d\n", selected);
“Selected”总是-1。我知道套接字很好,因为此时我已经成功地通过它发送了数据。
最佳答案
根据选择的手册页,EINVAL
表示“nfds为负或超时内包含的值无效”,这表示udpsocket
等于或小于cc>。
一个可能的提示:在fd_集合中设置-2
,然后使用udpSocket
计算udpsocket
。如果两个变量只在单个字符的情况下不同,则很容易丢失。
关于c - 在UDP套接字上调用select()会给出无效的参数错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10935071/