2011-08-26 4 views
4

나는 UDP와 recvfrom()을 사용하여 서버로부터 응답을받는 클라이언트 코드를 가지고있다. 서버가 켜져있을 때 이것은 정상적으로 작동하지만 서버를 중지하면 클라이언트 프로그램이 중단됩니다. 나는 recvfrom()이 서버의 응답을 기다리고 있다고 생각합니다.Recvfrom()이 걸려있다 - 서버가 꺼져있을 때 이것을 처리하는 방법

서버와 클라이언트가 모두 동일한 시스템에 설치되어있는 경우 서버가 꺼져있을 때 recvfrom()에서 오류가 발생하지만 서버와 클라이언트가 다른 시스템에있을 때 recvfrom()에서 클라이언트가 멈 춥니 다. OFF 이후 서버로부터의 응답 없음.

제발,이 상황을 어떻게 처리 할 수 ​​있을지 생각해보십시오. 어쩌면 타이머 신호 간섭이 문제를 해결할 수 있습니다. 아무도이 문제를 해결할 수 있습니까? 지금이 소켓에 대한 데이터가 없기 때문에

내가 비주얼 스튜디오에게 2005

답변

4

전화를 사용하고하는 것은,을 차단 입니다. 서버가 켜져있을 때 데이터를 보낼 수있을 정도로 빠르므로 recvfrom 전화가 걸려 신속하게 반환되었습니다. 서버가 꺼지면 아무도 데이터를 보내지 않고 recvfrom이 영원히 기다립니다. 서버가 켜져 있든 꺼져 있든 상관없이, recvfrom은 두 경우 모두 똑같은 일을합니다. 첫 번째 경우에 지연을 알지 못합니다.

비 차단 소켓을 사용해야합니다. 비 차단 모드에서 대기 중이 아닌 데이터가 없으면 recvfrom은 오류를 반환합니다. 그런 다음 select 호출을 사용하여 시간 초과가 발생하거나 데이터가 도착할 때까지 절전 모드로 전환 할 수 있습니다.

+0

감사합니다. 비 차단 모드는 나를 위해 –

+0

미래의 사용자를 위해 일했습니다. 소켓 비 블로킹을 만드는 방법에 대한 예제는 ioctlsocket 함수에 대한 MSDN 문서 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms738573%28v=vs.85%29)에 나와 있습니다. aspx – Ian

관련 문제