こんにちは私はUDP接続でクライアントからのパケットを待機し、それらすべてが効果的に到着したか、またはそれらの同じものが拒否されたかどうかをチェックするプロキシサーバーを作成しています。
その場合、失われたパケットごとに(send_ack()を使用して)クライアントに「ack」を送信する必要がありますが、最初のackを送信した直後に、selectループの「ifpart」が無制限の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);
}
}
アドバイスをありがとう、それが十分に明確であることを願っています!