【发布时间】:2013-03-18 15:30:20
【问题描述】:
您好,我正在创建一个代理服务器,它通过 UDP 连接等待来自客户端的数据包,并检查它们是否全部有效到达或是否相同。
在这种情况下,我应该为每个丢失的数据包(使用 send_ack() )向客户端发送一个“ack”,但在发送第一个 ack 之后,选择循环的“if 部分”发送无限的 ack 永远不会返回“其他部分”是来自客户端的选择监听数据(接收 _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);
}
}
希望够清楚,谢谢指教!
【问题讨论】:
-
您的实际问题是什么?
-
我怎样才能取消这个循环?:“在发送第一个确认之后,选择循环的“if 部分”发送无限的确认并且永远不会回到“else 部分”是选择监听来自客户端的数据(接收 _pkt() 函数)"
标签: c sockets multiplexing