Если в сокет (IPPROTO_TCP) пришло, например, 50 байтов, а я в обработчике сообщения FD_READ даю команду recv (или WSARecv) с размером буфера 20 байтов, то сначала возвращаются последние 10 байтов сообщения, вновь возникает событие FD_READ, последующая команда recv возвращает байты 20-39, в следующий раз возвращаются первые 20 байтов. В чем проблема? Или так и должно быть? Как тогда правильно обрабатывать данные, я же не могу предугадать размер поступивших данных? На codeguru посоветовали использовать модель select, но меня устраивает именно асинхронная модель WSAAsyncSelect, все равно алгоритм на интерфейс завязан.
[Net] Проблема с WSAAsyncSelect (ошибка в программе)13.05.02 10:05 Автор: vp016 Статус: Незарегистрированный пользователь
исходя из того что написано в РФС данные могут приходить частями из-за фрагментации (т.е. блок отправил - он пришел частями). Это не зависит от того как ты данные получаешь (асинхронно - это завист от того как система отдает с сокета данные и никоим образон не влияет на получение данных самой системой). Вот последовательность данных - ВСЕГДА дожна сохранятся (определение протокола).
Так что ищи ошибку у себя в проге.
> Если в сокет (IPPROTO_TCP) пришло, например, 50 байтов, а я > в обработчике сообщения FD_READ даю команду recv (или > WSARecv) с размером буфера 20 байтов, то сначала > возвращаются последние 10 байтов сообщения, вновь возникает > событие FD_READ, последующая команда recv возвращает байты > 20-39, в следующий раз возвращаются первые 20 байтов. В чем > проблема? Или так и должно быть? Как тогда правильно > обрабатывать данные, я же не могу предугадать размер > поступивших данных? На codeguru посоветовали использовать > модель select, но меня устраивает именно асинхронная модель > WSAAsyncSelect, все равно алгоритм на интерфейс завязан.
А в чем проблема? Не используй WSAAsyncSelect, используй либо
просто WSARecv, либо создавай новую нить и в ней можно пускать recv,
данные будут приниматься нормально.
[Net] Это понятно, спасибо, ... но не об этом ведь спросил07.05.02 15:08 Автор: mijk Статус: Незарегистрированный пользователь
WSAAsyncSelect вообще неработоспособна, что ли? Кто-нибудь вообще использовал?!! Просто программа получается очень простой на этой модели, не нужно синхронизации потоков... :(