Socket.Select () с тайм-аутом -1 вообще не блокируется - PullRequest
0 голосов
/ 10 февраля 2011

Я звоню в Socket. Выберите несколько сокетов и хочу, чтобы весь поток блокировался, пока один (или несколько) из сокетов не будут готовы. В документации сказано, что если вы задаете время ожидания -1, время ожидания должно быть бесконечным. Тем не менее, он возвращается почти автоматически.

Я использую .NET 3.5. Вот мой код:

Socket.Select(socketAVerifier, null, null, -1);

    foreach (var socketsPrets in socketAVerifier)
    {
        switch (socketsPrets.ProtocolType)
        {
            case ProtocolType.Tcp:
                AccepterConnection();
            break;
            case ProtocolType.Udp:
                EcouterBroadcast();
            break;                        
            default:
                Journal.WriteLine("Socket de protocol inconnu" +
                                     socketsPrets.ProtocolType,
                                  "Serveur", Niveaux.Grave);
            break;
        }
    }

Есть ли способ сделать звонок для выбора блокировки?

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Кажется, ошибка в .NET 3.5. Обойдено, передавая Int32.MaxInt

0 голосов
/ 10 февраля 2011

Установка -1 (или Timeout.Infinite) - это то, как вы устанавливаете блокировку.

Я смутно помню (так что это может быть дезинформация), которую Select() возвращает, если естьошибка с одним из сокетов, даже если вас интересует только готовность к чтению, поэтому вы можете проверить, является ли это причиной, и удалить неудачное соединение из списка, переданного при следующем вызове Select().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...