Мне интересно, означает ли использование перекрывающегося ввода-вывода, что я использую сокет в неблокирующем режиме, или же концепция блокирующих и неблокирующих сокетов не связана с концепцией перекрывающегося ввода-вывода.
Я бы сказал, что они не связаны друг с другом. Блокировка против неблокирования для сокетов прямолинейна. Если ты звонишь send()
или же recv()
в неблокирующем режиме, и сокет не имеет ничего доступного (для send()
, нет входящих данных для recv()
), вы получаете ответ об ошибке WSAWOULDBLOCK
, В режиме блокировки функция просто не вернется, пока запрошенная операция не будет завершена или не произойдет ошибка.
Однако перекрытие ввода-вывода — это скорее шаблон делегата. Он примет ваш WSASend()
или же WSARecv()
запросить и обработать это для вас. Однако это не произойдет, как только функция вернется. Вместо этого эти функции получают указатель на обратный вызов, который указывает клиент. После завершения операции отправки / получения вы получите уведомление с помощью предоставленного вами метода обратного вызова.
Я бы сказал, что I / O Overlapping — это устранение необходимости для клиентских программистов постоянно проверять неблокирующие сокеты и вызовы. select()
опросить их.