Как Overlapped I / O относится к концепции блокирующих и неблокирующих сокетов?

Мне интересно, означает ли использование перекрывающегося ввода-вывода, что я использую сокет в неблокирующем режиме, или же концепция блокирующих и неблокирующих сокетов не связана с концепцией перекрывающегося ввода-вывода.

0

Решение

Я бы сказал, что они не связаны друг с другом. Блокировка против неблокирования для сокетов прямолинейна. Если ты звонишь send() или же recv() в неблокирующем режиме, и сокет не имеет ничего доступного (для send(), нет входящих данных для recv()), вы получаете ответ об ошибке WSAWOULDBLOCK, В режиме блокировки функция просто не вернется, пока запрошенная операция не будет завершена или не произойдет ошибка.

Однако перекрытие ввода-вывода — это скорее шаблон делегата. Он примет ваш WSASend() или же WSARecv() запросить и обработать это для вас. Однако это не произойдет, как только функция вернется. Вместо этого эти функции получают указатель на обратный вызов, который указывает клиент. После завершения операции отправки / получения вы получите уведомление с помощью предоставленного вами метода обратного вызова.

Я бы сказал, что I / O Overlapping — это устранение необходимости для клиентских программистов постоянно проверять неблокирующие сокеты и вызовы. select() опросить их.

2

Другие решения


По вопросам рекламы [email protected]