Использование TCP в портах завершения ввода-вывода с сервера, если я делаю два последовательных WSASend
в том же сокете первый отправляет «ABC», а второй отправляет «DEF», затем, когда я звоню GetQueuedCompletionStatus
это говорит мне о том, что первый WSASend
только отправил «АБ», тогда я звоню GetQueuedCompletionStatus
снова, и это говорит мне, что второй WSASend
отправил «DEF», клиент собирается получить «ABDEF»? или будет второй WSASend
потерпеть неудачу, потому что первый WSASend
сообщение было неполным?
Принимающая сторона не получит ABDEF, поскольку это подразумевает нарушение целостности потока.
Если вы выполняете WSASend () для ABC и DEF (в указанном порядке) и получаете дополнения для 2 байтов для ABC и 3 байтов для DEF, принимающая сторона могла бы ничего не получить, A, AB, ABC, ABCD, ABCDE или ABCDEF , Вполне вероятно, что они не получили ничего кроме AB.
Когда вы завершили WSASend (), который указывает на что-либо, кроме полной отправки, вы должны завершить сокет. closesocket () действительно будет последним, что вы должны сделать; до этого вы должны истощить все ожидающие отправки и получения (CancelIoEx (), shutdown () и др.).
Других решений пока нет …