2013-09-25 2 views
0

새 소켓이 구성되지 않은 경우, 즉 새로운 연결이없는 경우 server.accept() 메서드가 반환하는 것은 무엇입니까? sever.accept()이 새로운 연결을 기다리는 동안 코드의 다음 줄로 갈 수 있습니까?연결을 기다리는 동안 server.accept()의 반환 값

+0

차단 모드에서는 * 반환하지 않습니다. – EJP

답변

0

서버가 연결을 기다리는 동안 무언가를하고 싶다면 여러 스레드를 사용할 수 있습니다. 단일 스레드 응용 프로그램에서는 함수를 호출하고 반환을 기다리지 않고 작업을 계속할 수 없습니다. 서버가 연결을 수락하기를 기다리고 있거나 다른 계산을 수행하고 있습니다.

스레드 대신 가능한 방법은 서버 소켓에 the SO_TIMEOUT socket option을 설정하는 것입니다. 이렇게하면 accept에 대한 호출이 제한 시간 내에 연결을받지 못하면 예외를 throw하여 다음 줄로 이동할 수 있습니다. 예를 들어

:

ServerSocket ss = new ServerSocket(8989); 
ss.setSoTimeout(10000); // 10 seconds 
Socket clientSocket; 
try { 
    clientSocket = ss.accept(); 
    // process connection from client 
} catch (SocketTimeoutException ste) { 
    // connection was not received, 
    // do something else 
} 

또 다른 대안은 비 차단 IO와 Selector 클래스를 사용하고 있습니다. 이런 식으로 작성된 example of a non-blocking socket server입니다.

0

아니요. server.accept()는 차단 방법이며 기다릴 것입니다. javadoc

에서

는 연결이 소켓에 대한 요구를 대기 해, 그것을받습니다. 메서드는 연결될 때까지 차단합니다.

관련 문제