0
따라서 클라이언트가 소켓에서 읽고 0을 반환하는 상황을 상상해보십시오. 이는 EOF를 의미하거나 서버가 연결을 종료했음을 의미합니다.서버가 연결을 닫을 때 클라이언트가 close를 호출해야합니까?
클라이언트가이 파일 설명자를 close해야합니까? 클라이언트가 close를 호출하지 않으면 일부 파일 설명자 누수가 발생합니까?
따라서 클라이언트가 소켓에서 읽고 0을 반환하는 상황을 상상해보십시오. 이는 EOF를 의미하거나 서버가 연결을 종료했음을 의미합니다.서버가 연결을 닫을 때 클라이언트가 close를 호출해야합니까?
클라이언트가이 파일 설명자를 close해야합니까? 클라이언트가 close를 호출하지 않으면 일부 파일 설명자 누수가 발생합니까?
예 여전히 닫아야합니다. 원격 호스트가 연결을 닫은 경우에도 핸들은 컴퓨터에 있습니다.
당신은 여전히 소켓을 참조 할 수 있습니다 (그래서 방법은 간단보다 세분화 오류가 발생할 가능성이 더 높습니다 호출, 당신이 핸들이 완전히 사라 졌 close()
를 호출 한 후 연결 자체가. 폐쇄 된 경우에도 read()
등의 다양한 방법을 호출 0
를 반환하는 것은 분명합니다. close()
이 두 가지 작업을 가지고 호출.
원격 호스트가 소켓을 닫을 때도 메모리를 정리해야합니다.
따라서 서버가 연결을 닫을 때 클라이언트에 계속 남아있는 상태가 커널에 있습니다. 따라서 클라이언트가 닫기를 호출하면 FIN이 서버로 전송됩니까? 그렇다면 클라이언트가 close를 호출 할 때까지 서버가 tcp 연결에 대한 상태를 유지해야합니다. – 0xhacker
예, 원격 호스트가 연결을 닫을 때 소켓이 파괴 된 경우 후속 호출은 OS에 존재하지 않는 무언가를 묻고 응용 프로그램을 중단시킵니다. 그래서 "소켓"은 연결이 사라져도 로컬 응용 프로그램이 close()를 호출 할 때까지 존재해야합니다. 연결은 로컬 응용 프로그램이나 원격 응용 프로그램이'close()'또는 다른 시간 초과 발생을 호출 할 때까지 존재합니다. –
닫힌 소켓을 사용하면 오류 코드가 반환됩니다 * 분할 위반이 발생하지 않거나 프로그램이 중단되지 않습니다. – EJP