C로 작성된 TCP 서버와 클라이언트가있어 영원히 열려야하는 연결을 엽니 다. 첫번째 send에서, errno는 0을 반환한다. 후속 송신시에는 조작이 시간 초과됨을 나타내는 errno 60이 표시됩니다. 패킷은 여전히 서버에 의해 수신되지만 아무것도 잘못된 것으로 보입니다. errno가 설정되는 원인은 무엇일까요? 올바르게 작동하는 것 같으므로이 오류를 무시하는 것이 가장 좋습니다.TCP 작업 시간 초과
2
A
답변
3
임의의 추측 : errno
은 이 일 때만 설정됩니다. 함수가 실패하지 않으면 errno
은있는 그대로 유지됩니다. 그것은 다음은 잘못하지 세트 0에 입니다 대신
send(…);
if (errno) {
perror("send");
}
, 당신이 전송 결과 확인해야합니다
ssize_t res = send(…);
if (-1 == res) {
perror("send")
}
는 다음과 같은 프로그램이 확인할 수 있습니다
을#include <stdio.h>
#include <unistd.h>
int main() {
char buf[16];
ssize_t res;
read(999, buf, sizeof(buf));
perror("read");
write(1, "hello world\n", 12);
perror("write");
}
출력 :
read: Bad file descriptor
hello world
write: Bad file descriptor
(참고 : STDOUT은 fd 1이라고 가정)
0
나는 send()의 반환 값이 아닌 errno 변수 만 테스트한다고 생각합니다.
함수 리턴 값이 함수에 의해 errno 변수가 설정되었음을 표시 한 후에 errno 변수를 검사해야합니다. 함수가 errno가 설정되었다고보고하지 않으면 errno 변수는 의미있는 값을 보유하지 않습니다.
2
다른 사람들이 언급 한 것처럼, errno
값을 방탄하는 방식으로 해석하려면 Unix 시스템 기능 ... 모두를 반환해야합니다! 나는 헨리 스펜서 (Henry Spencer)의 표준 지침 6 항목을 참조한다. The Ten Commandments for C programmers :
어려움이있을 때 오류 코드를 반환하도록 광고 기능을 알리는 경우, 해당 코드를 확인해야한다. 너의 타자를 치는 손가락에 고통을 일으킨다. 네가 "나에게 일어날 수 없다"고 생각한다면, 신은 반드시 네 오만함을 위해 네를 벌할 것이다.
관련 문제
- 1. TCP 소켓 시간 초과 구성
- 2. asp.net의 시간 초과 작업
- 3. 작업 시간 초과 - ASP
- 4. Asp.net 크롤러 Webresponse 작업 시간 초과
- 5. SOAP - 작업 시간 초과 - 내 서버 제외
- 6. WebRequest GetResponse 응답 없음, 작업 시간 초과
- 7. SSIS 2005 프로세스 작업 시간 초과 문제
- 8. 하드웨어 및 시간 초과 작업 .net
- 9. 회원 시간 초과 및 세션 시간 초과
- 10. 시간 초과
- 11. MantaRay JMS : 이벤트 ID 4226. TCP 연결 시간 초과?
- 12. java.net.SocketException 연결 시간 초과 오류
- 13. QNetworkAccessManager 시간 초과
- 14. 레일에서 시간 초과 캐싱
- 15. chat.facebook.com 연결 시간 초과 오류
- 16. Android BluetoothSocket - 시간 초과
- 17. sleepForTimeInterval 제한 시간 초과 앱
- 18. DataInputStream에 수동으로 시간 초과 설정
- 19. ASP.Net AJAX 시간 초과 요청이 시간 초과 기간보다 오래 완료되었지만
- 20. nginx php5-fpm 업스트림 시간 초과 (110 : 연결 시간 초과)
- 21. SSIS 패키지 시간 초과 문제
- 22. Excel VBA의 시간 초과 알림
- 23. Ruby mod_passenger 프로세스 시간 초과
- 24. PageMethod 기본 시간 초과
- 25. jQuery에서 시간 초과 설정.
- 26. NSURLConnection 시간 초과?
- 27. SQL 서버 시간 초과
- 28. 플렉스 스트리밍 시간 초과
- 29. IDbTransaction 롤백 시간 초과
- 30. ASP.NET의 세션 시간 초과
실제로 send()는 -1을 반환합니까? – Artelius