Непрерывность нескольких портов сжатия WSASend() io

Использование TCP в портах завершения ввода-вывода с сервера, если я делаю два последовательных WSASend в том же сокете первый отправляет "ABC", а второй отправляет "DEF", затем, когда я звоню GetQueuedCompletionStatus это говорит мне о том, что первый WSASend только отправил "АБ", тогда я звоню GetQueuedCompletionStatus снова, и это говорит мне, что второй WSASend отправил "DEF", клиент собирается получить "ABDEF"? или будет второй WSASend потерпеть неудачу, потому что первый WSASend сообщение было неполным?

1 ответ

Принимающая сторона не получит ABDEF, поскольку это подразумевает нарушение целостности потока.

Если вы выполняете WSASend() для ABC и DEF (в указанном порядке) и получаете дополнения для 2 байтов для ABC и 3 байтов для DEF, принимающая сторона могла бы ничего не получить, A, AB, ABC, ABCD, ABCDE или ABCDEF, Вполне вероятно, что они не получили ничего кроме AB.

Когда вы завершили WSASend(), который указывает на что-либо, кроме полной отправки, вы должны завершить сокет. closesocket() действительно будет последним, что вы должны сделать; до этого вы должны истощить все ожидающие отправки и получения (CancelIoEx(), shutdown() и др.).

Другие вопросы по тегам