2011-03-14 3 views
0

내 TCP 서버 코드는 다음과 같다 : 어떤 이유 (unpluged 이더넷 라인)에 대한 소켓 분리는, 함수가 호출 프로세스를 차단 fputc합니다소켓 연결이 비정상적으로 끊어 질 때 FILE 스트림 버퍼는 어떻게 될까요?

conn_fd = accept(); 
stream = fdopen(conn_fd...); 
//... 
fp = fopen(path, "r"); 
while ((c = getc(fp)) != EOF) 
    fputc(c, stream); 

경우? 버퍼를 스트리밍하려면 어떻게됩니까?
fputc 기능이 차단되는 경우 문제를 해결하기 위해 SO_SNDTIMEO를 설정할 수 있습니까?

대단히 감사합니다!

답변

2

연결 종료시 모든 읽기/쓰기 기능은 오류를 반환합니다 (읽기는 수신 버퍼를 읽은 후에 만 ​​실패합니다). 더 이상 데이터를 읽고 쓸 수없는 이유를 알고 싶다면 errno를 확인하십시오.

+0

연결 종료가 적시에 감지되지 않을 수도 있지만, 그렇다면 송신 버퍼가 채워지면 fputc() 함수를 차단할 수 있습니다. – caf

+0

사실, 기본 TCP 시간 초과는 다소 길다. 그러나 이러한 상황은 TCP 장애 패킷을 전송할 수없고 데이터 패키지에 전혀 응답이없는 네트워크 장애에서만 발생합니다. – Basilevs

+0

사실 기본적으로 프로그램은 SIGPIPE 신호를받으며 오류가 아닌 종료됩니다. – mark4o

관련 문제