2016-10-18 1 views
0

내가 로컬 호스트에 소켓의 공개 테스트하기 위해 자바 libs와 중 하나에 논리를 다음보고 있어요 :localhost에서 ServerSocket을 열고 즉시 닫으면 TIME_WAIT이 (가) 발생합니까?

내 질문은 로컬 호스트의 상태를 TIME_WAIT이 소켓 리드 데이터 패킷이 전송되지 소켓은했을 때
ServerSocket socket = new ServerSocket(port); 
socket.close(); 

그것을 연 후 즉시 닫았습니까? 이 경우 응용 프로그램이 동일한 포트에 바인딩을 시도하면 2MSL 값 내에서 완료되면 '주소가 이미 사용 중입니다'오류가 발생할 수 있습니까?

위와 같은 작은 테스트 프로그램을 작성했지만이 프로그램을 실행 한 Linux 컴퓨터에서 netstat 또는 ss를 실행하면이 포트에 대해 TIME_WAIT가 전혀 표시되지 않습니다. 소켓이 데이터 패킷을 전송하는 데 사용되지 않은 경우에도 상태 시스템을 적용해야합니까?

+0

소켓이 절대로 'CLOSED'상태에서 벗어나지 않으면 'CLOSED'상태로 돌아 가기 위해 아무 것도 할 필요가 없습니다. –

+0

안녕하세요 @Damien_The_Unbeliever - 미안하지만, 요점을 얻지 못했습니다. 위의 경우 소켓이 TIME_WAIT를 통과할까요? –

+2

당신이보고있는 특정 상태 머신 다이어그램을 모르겠지만 [this one] (http://www.tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm)이라고 말하십시오. 소켓 *은'CLOSED' 상태에서 시작합니다. 그런 다음 몇 가지 특정 전환을 거쳐'ESTABLISHED '가 되어야만하고 특정 경로를 따라 내려 가면'TIME_WAIT'에서 대기하여 'CLOSED'로 돌아갑니다. 소켓을'CLOSED' 상태에서 빠져 나오기 위해 아무 것도하지 않았기 때문에, 전환이 필요하지 않습니다. –

답변

1

TIME_WAIT는 연결 상태입니다. 연결을 만들지 않았습니다. 에고 TIME_WAIT에 도달하지 못했습니다.

관련 문제