2009-07-22 5 views
1

아래 코드를 사용 중입니다. 언젠가 소켓이 출시되지 않은 것 같습니다.udpclient.close가 소켓을 항상 닫지는 않습니다.

어떻게 발견 되었습니까? 프로세스 탐색기 (sysinternal에서)를 사용하여 응용 프로그램의 소유권 TCP/IP 탭으로갑니다.

I 포트를 볼 수는 동안 (5 주와 같은) 그것이 있어야하는 동안 응용 프로그램에서 사용하는 40 포트처럼이 후,

내 문제는 콘솔에 "에서 netstat -a"를 입력하여 사용 제로.

누구나 그 이유를 알 수 있습니까? 소켓이 프로세스가 죽을 때까지 기다리고 앉아서하는 패킷을 수신하지 않을 경우

SNTPData = TimeSocket.Receive(ref EPhost); 

:

public void Connect() 
    { 
     try { 
      // Resolve server address 
      IPHostEntry hostadd = Dns.GetHostEntry(TimeServer); 
      IPEndPoint EPhost = new IPEndPoint(hostadd.AddressList[0], 123); 

      //Connect the time server 
      UdpClient TimeSocket = new UdpClient(); 
      TimeSocket.Connect(EPhost); 

      TimeSocket.Send(SNTPData, SNTPData.Length); 
      SNTPData = TimeSocket.Receive(ref EPhost);     
      TimeSocket.Close(); 
      if (!IsResponseValid()) 
      { 
       throw new Exception("Invalid response from " + TimeServer); 
      } 

     } catch(SocketException e) 
      { 
      throw new Exception(e.Message); 
      } 

    } 
+0

올바른 경우 답변에 투표하십시오. ;) – Isaac

답변

1

당신은 영원히 차단하고 있습니다.

다른 스레드에서 TimeSocket.Close()를 호출하거나 SetSocketOption을 사용하여 수신시 제한 시간을 설정하여 소켓을 닫아야합니다.

관련 문제