我很难让select()系统调用解除阻塞.我正在尝试从一组3个插槽中复用数据输入.我为一个名为sock []的int数组中的每个接口创建一个套接字.如果我取消注释第一个块,我可以毫无问题地在每个套接字上接收数据.通过评论它,我永远不会通过select()调用.关于select()设置和调用,你能看到我可能做错的事吗?
//This block will receive data from sock[0], sock[1], and sock[2] when left uncommented
/*n = recvfrom(sock[2], buf, 1500,0,(struct sockaddr*)&recvaddr, &recvaddrlen);
printf("\nrecieved\n");
print_buf(buf);*/
fd_set sockets;
FD_ZERO(&sockets);
for(i=0; i<3; i++){
FD_SET(sock[i], &sockets);
}
select(3, &sockets, NULL, NULL, NULL);
printf("\nSocket selected\n");
for(i=0; i<3; i++){
//Check for connected sockets
if(FD_ISSET(i, &sockets)){
printf("\nSocket %d", i);
n = recvfrom(sock[i], buf, 1500,0,(struct sockaddr*)&recvaddr, &recvaddrlen);
}
}
Run Code Online (Sandbox Code Playgroud)