나는 다음과 같은 방법으로 TCP 소켓 사용 "차단"C#은 TCP 소켓 재산권 불일치는
m_socket = 새로운 소켓 (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp을); m_socket.ReceiveTimeout = 15;
일반적인 흐름은 무한 while 루프에서 m_socket.Receive를 실행하고 어떤 시점에서 소켓이 오랜 기간 동안 비어 있지만 닫고 싶지 않다는 것입니다. 대신 15 초마다 예외를 읽고 계속 시도하려고합니다.
처음에 소켓이 비게되면 예상대로 15 초 후에 제한 시간 소켓 예외가 발생합니다. 그렇다면 여전히 루프에 있기 때문에 m_socket.Receive가 다시 호출됩니다. 그러나 이번에는 비 블로킹 소켓 작업을 완료 할 수 없으므로 예외가 발생합니다 (예상하지 못한 것이기 때문에 다른 15 개를 차단한다고 가정 함). 초) 위의 한 줄 m_socket.Blocking 쿼리 할 때 TRUE 말한다.
흥미로운 점은 내가 m_socket.Blocking = true를 수행하면; m_socket.Receive 바로 전에 모든 것이 예상대로 실행됩니다 (시간 초과 예외는 15 초마다 발생합니다).
유일하게 가능한 설명은 시간 초과 예외가 수신 동작 또는 소켓 작동을 일반적으로 비 차단 방식으로 작동하도록 변경하고 그에 따라 "차단"속성을 변경하지 않는 것입니다.
수신 루프 코드를 올리십시오. – James