2011-07-03 5 views
0

기본 연결이 CLOSE-WAIT 상태 일 때 SocketChannel.write이 예외를 발생시키지 않는 것으로 나타났습니다. 예상되는 행동인가? 그렇다면 어떻게 연결이 ESTABLISHED이 아닌지 알 수 있습니까?CLOSE-WAIT에서 SocketChannel에 쓰기

답변

2

처음으로 예외를 throw해서는 안됩니다. 연결이 여전히 쓰기 가능할 수 있습니다. CLOSE_WAIT는 들어오는 FIN이 수신되었음을 나타냅니다. 그 의미는 다른 쪽이 글을 끝냈다는 것입니다. 여전히 읽을 수 있습니다. 출력 연결을 종료했을 수 있습니다. 따라서 TCP는 데이터를 작성해야합니다. 피어가 전체 연결을 닫은 경우 쓰기 수신시 RST를 발행합니다.이 경우 후속 쓰기에서 연결 재설정이 발생합니다.

응용 프로그램 프로토콜은 피어에 의해 닫힌 연결에 쓰기가 불가능하거나 오류가 나타나기 전에 여러 번의 쓰기가 수행 될 수있는 프로토콜이어야합니다. TCP는 아마도 첫 번째 쓰기에서 오류를 줄 수 없습니다.

관련 문제