Здравствуйте, Fedor.P, Вы писали:
FP>Например, когда следует использовать WSARecv, а когда просто recv?
WSARecv следует использовать для overlapped (не путать с non-blocking) I/O.
Для той же цели можно использовать ReadFile, но WSARecv предпочтительнее из-за дополнительных опций и отсутствия лишнего переключения в ядро и обратно.
FP>И вообще, зачем товарищи из M$ продублировали все SocketAPI-функции своими WSA-аналогами!
Для нестандартное расширений функциональности.
FP>Хочется все-таки иметь какой-то единый универсальный вариант
Здравствуйте, Michael Chelnokov, Вы писали:
MC>WSARecv следует использовать для overlapped (не путать с non-blocking) I/O. MC>Для той же цели можно использовать ReadFile, но WSARecv предпочтительнее из-за дополнительных опций и отсутствия лишнего переключения в ядро и обратно.
Спасибо за ответ!
Осталось только рзобраться с этой интересной темой — overlapped I/O (кажется IOCP из этой серии?). Но на мое удивление в интернете очень мало информации на тему "Introduction to IOCP".
Если у Вас есть какие-нибудь ссылочки, поделитесь пожалуйста!
Здравствуйте, Fedor.P, Вы писали:
FP>Осталось только рзобраться с этой интересной темой — overlapped I/O (кажется IOCP из этой серии?).
Нет, не совсем из этой. IOCP — лишь один из способов получения уведомлений о завершении операции ввода-вывода.
Кроме него еще существуют:
— установка события (поле OVERLAPPED.hEvent) с различными вариациями его ожидания;
— вызов APC (смотрите, например, функцию ReadFileEx).
FP>Но на мое удивление в интернете очень мало информации на тему "Introduction to IOCP". FP>Если у Вас есть какие-нибудь ссылочки, поделитесь пожалуйста!
MSDN, ключевые слова "I/O completion port"
Тема различных способов ввода-вывода немного (но неплохо) по-русски описана в этой
Здравствуйте, Edge, Вы писали:
E>Здравствуйте, Michael Chelnokov, Вы писали:
MC>>WSARecv следует использовать для overlapped (не путать с non-blocking) I/O.
E>Также не забываем по мегафичу — scatter/gather I/O. В некоторых ситуациях здорово спасает
Блин, да где же найти такие статьи, где было бы описаны идеи этих всех слов: "overlapped, scatter и gather". Не то, какие преимущества они дают (это уж следствие), а то, каким образом эти преимущества получаются. Т.е. для новичков чего-нить!
Здравствуйте, Fedor.P, Вы писали:
FP>Блин, да где же найти такие статьи, где было бы описаны идеи этих всех слов: "overlapped, scatter и gather". Не то, какие преимущества они дают (это уж следствие), а то, каким образом эти преимущества получаются. Т.е. для новичков чего-нить!
Для новичков ссылок, выданных выше, должно хватить. Также почитай серию статей здесь, там описано много граблей. А вообще, в этих концепциях ничего сложного нет, сложны только вопросы практической реализации...
Здравствуйте, Edge, Вы писали:
E>Для новичков ссылок, выданных выше, должно хватить. Также почитай серию статей здесь, там описано много граблей. А вообще, в этих концепциях ничего сложного нет, сложны только вопросы практической реализации...
Здравствуйте, Michael Chelnokov, Вы писали:
MC>Здравствуйте, Fedor.P, Вы писали:
FP>>Например, когда следует использовать WSARecv, а когда просто recv?
MC>WSARecv следует использовать для overlapped (не путать с non-blocking) I/O. MC>Для той же цели можно использовать ReadFile, но WSARecv предпочтительнее из-за дополнительных опций и отсутствия лишнего переключения в ядро и обратно.
Я бы не советовал использовать файловые функции с сокетами. Сокет может быть не файлом. Особенно эта ситуация вероятна, если установлен т.н LSP фильтр. В таком случае операция ReadFile просто обломится.