У меня возникла странная проблема, я никогда не испытывал это раньше, вот код сервера (в данном случае клиент - это firefox), способ, которым я его создаю:
_Socket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
_Socket.Bind( new IPEndPoint( Settings.IP, Settings.Port ) );
_Socket.Listen( 1000 );
_Socket.Blocking = false;
способ, которым я принимаю соединение:
while( _IsWorking )
{
if( listener.Socket.Poll( -1, SelectMode.SelectRead ) )
{
Socket clientSocket = listener.Socket.Accept();
clientSocket.Blocking = false;
clientSocket.SetSocketOption( SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true );
}
}
Так что я ожидаю, что он зависнет на слушателе. Сокет. Оплата до тех пор, пока не установится новое соединение, но после первого соединения оно зависает при опросе навсегда. Я пытался опрашивать его постоянно с меньшей задержкой, скажем, 10 микросекунд, тогда он никогда не идет в SelectMode.SelectRead. Я думаю, что это может быть как-то связано с повторным использованием сокета клиента? Может быть, я не выключаю клиентский сокет правильно, и клиент (firefox) решает использовать старый сокет?
Я отключаю клиентский сокет следующим образом:
Context.Socket.Shutdown( SocketShutdown.Both ); // context is just a wrapper around socket
Context.Socket.Close();
Что может вызвать эту проблему?