嗨,我正在创建一个代理服务器,它通过 UDP 连接等待来自客户端的数据包,并检查它们是否都有效到达或是否相同。
在这种情况下,我应该为每个丢失的数据包(使用 send_ack() )向客户端发送一个“ack”,但是在发送第一个 ack 之后,选择循环的“if 部分”发送无限的 ack 永远不会回到“else”部分”是来自客户端的选择监听数据(接收 _pkt() 函数)
fd_set rset, allset;
int maxfd, nready;
struct timeval timeout;
timeout.tv_sec = 4;
timeout.tv_usec = 150000;
maxfd = socketfd;
FD_ZERO(&allset);
FD_SET(socketfd, &allset);
rset = allset;
for( i=0; ;i++){
do {
nready=select( (maxfd +1), &rset, NULL, NULL, &timeout);
} while ((nready<0) & (errno==EINTR));
if( nready<0) {
perror("Error main: select failed: ");
exit(32);
}
if( nready==0){
send_ack(socketfd,head);
}
else{
receive_pkt(socketfd, head);
}
}
希望它足够清楚,感谢您的建议!