2016-03-05 4 views
0

Я понимаю, Socket.Accept() является блокирующим вызовом, и для него нет свойства тайм-аута (например, ReceiveTimeout или SendTimeout). Таким образом, поток будет просто ждать бесконечно для нового соединения.Я использую Socket для прослушивания новых подключений. Как выйти из синхронного метода Socket.Accept()? Как я могу завершить этот вызов?

Так что мои вопросы: как я могу завершить этот вызов через определенный промежуток времени. Должен ли я рассмотреть возможность закрытия прослушивающего гнезда из какого-то другого потока?

Любые лучшие способы сделать это?

ответ

1

Вы можете использовать Socket.Poll, что позволяет подождать соединения с таймаутом. Назовите его SelectMode.SelectRead, и если он вернет true, ожидается соединение, которое вы можете принять без блокировки.