안녕하세요, UDP 연결로 클라이언트의 패킷을 기다리는 프록시 서버를 만들고, 모두가 실제로 도착했는지 또는 같은 것이 거부되었는지 확인합니다.UDP 소켓에서 select()를 사용합니다.
그럴 경우 각 잃어버린 패킷 (send_ack())과 함께 클라이언트에게 "ack"를 보내야합니다.하지만 얼마 지나지 않아 무한대의 acks를 보내지 않는 select 루프의 "if 부분"을 보냈습니다. 은 "다른 부분"에 선택이 조언에 대한 클라이언트의 데이터 (_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);
}
}
은 분명히 충분 희망, 감사를들을 수 있었다!
실제 질문은 무엇입니까? – Jelmer
어떻게이 루프를 벗어날 수 있을까요? : "첫 번째 확인을 보낸 후에"선택 부분 "이 무제한 확인을 보내고 절대로"else 부분 "으로 돌아 가지 않을 것입니다. 클라이언트의 선택 수신 데이터입니다 (수신 _pkt() 기능) " – nirva