2013-05-01 2 views

답변

1

예 여전히 닫아야합니다. 원격 호스트가 연결을 닫은 경우에도 핸들은 컴퓨터에 있습니다.

당신은 여전히 ​​소켓을 참조 할 수 있습니다 (그래서 방법은 간단보다 세분화 오류가 발생할 가능성이 더 높습니다 호출, 당신이 핸들이 완전히 사라 졌 close()를 호출 한 후 연결 자체가. 폐쇄 된 경우에도 read() 등의 다양한 방법을 호출 0

를 반환하는 것은 분명합니다. close()이 두 가지 작업을 가지고 호출.

  1. 을 그것은 apropriate 패킷 (들) 소켓이 닫힌 것을 원격 호스트 말할를 보냅니다.
  2. 그것은 메모리 associ를 정리 그 소켓으로 먹었다.

원격 호스트가 소켓을 닫을 때도 메모리를 정리해야합니다.

+0

따라서 서버가 연결을 닫을 때 클라이언트에 계속 남아있는 상태가 커널에 있습니다. 따라서 클라이언트가 닫기를 호출하면 FIN이 서버로 전송됩니까? 그렇다면 클라이언트가 close를 호출 할 때까지 서버가 tcp 연결에 대한 상태를 유지해야합니다. – 0xhacker

+0

예, 원격 호스트가 연결을 닫을 때 소켓이 파괴 된 경우 후속 호출은 OS에 존재하지 않는 무언가를 묻고 응용 프로그램을 중단시킵니다. 그래서 "소켓"은 연결이 사라져도 로컬 응용 프로그램이 close()를 호출 할 때까지 존재해야합니다. 연결은 로컬 응용 프로그램이나 원격 응용 프로그램이'close()'또는 다른 시간 초과 발생을 호출 할 때까지 존재합니다. –

+0

닫힌 소켓을 사용하면 오류 코드가 반환됩니다 * 분할 위반이 발생하지 않거나 프로그램이 중단되지 않습니다. – EJP

관련 문제