Socket.SetSocketOption выдает недопустимый аргумент исключения в Mac OS и Linux, но отлично работает в Windows - PullRequest
2 голосов
/ 14 июня 2019
Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, timeout);

Если для тайм-аута задано значение -1, метод отлично работает в Windows, но не работает в Linux и Mac со следующим исключением

System.Net.Sockets.SocketException (22): Недопустимый аргумент в System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException (ошибка SocketError, String callerName) в System.Net.Sockets.Socket.SetSocketOption (SocketOptionLevel optionLevel, SocketOptionName параметр-имя-типа, имя-узла-имя-типа, имя-узла-имя-узла, имя_сокет_четкого типа, имя_сокет_четкого типа, имя_сокета_сокета).Socket.SetSocketOption (SocketOptionLevel optionLevel, SocketOptionName optionName, Int32 optionValue)

Если для mac и linux установлено значение 0, то нет никаких исключений.

1), если время ожидания равнопри значении -1 он выполняет неопределенный опрос окон.Будет ли timeout = 0 делать то же самое в Windows?

2) ON linux, если для тайм-аута установлено значение 0?Делает ли это неопределенный опрос?

Когда я использую 0 для тайм-аута, приложение периодически завершается ошибкой с

    System.NotSupportedException: The BeginWrite method cannot be called >when another write operation is pending.
      at System.Net.Security._SslStream.ProcessWrite(Byte[] buffer, >Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
      at System.Net.Security._SslStream.BeginWrite(Byte[] buffer, Int32 >offset, Int32 count, AsyncCallback asyncCallback, Object asyncState)

1 Ответ

1 голос
/ 14 июня 2019

1) если для тайм-аута задано значение -1, он проводит неопределенный опрос окон. Будет timeout = 0 сделать то же самое в Windows?

2) ON linux, если для тайм-аута установлено значение 0? Это делает неопределенный опрос?

Да, значения 0 и -1 имеют одинаковое поведение в соответствии с документацией для Socket.RecieveTimeout

Значение времени ожидания в миллисекундах. Значение по умолчанию равно 0, что указывает на бесконечный период ожидания. Указание -1 также указывает на бесконечный период ожидания.

...