непрерывность нескольких портов сжатия 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 () и др.).

0

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

Других решений пока нет …

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