IOCP + (SOCKET_ERROR + WSA_IO_PENDING)
От: Panerox  
Дата: 04.06.07 10:06
Оценка:
Здравствуйте!

Вот код сервера здесь
Столько времени убил на то чтобы найти ошибку, но все равно никак не могу.

Функция WSARecv все время возвращает SOCKET_ERROR + WSA_IO_PENDING.
GetQueuedCompletionStatus() возвращаем CompletionKey и Overlapped структуру. Все типа хорошо. Каждый Recv ловится нормально, но с ошибкой SOCKET_ERROR + WSA_IO_PENDING.
Я все перерыл, но безуспешно. Не могу понять когда операция завершится, все время PENDING .

Может кто подскажет, где баг зарыт. Чувствую, что где-то лажу сделал .

Спасибо!!!
Re: IOCP + (SOCKET_ERROR + WSA_IO_PENDING)
От: vasmann  
Дата: 04.06.07 10:13
Оценка:
Здравствуйте, Panerox, Вы писали:

P>Здравствуйте!


P>Вот код сервера здесь

P>Столько времени убил на то чтобы найти ошибку, но все равно никак не могу.

P>Функция WSARecv все время возвращает SOCKET_ERROR + WSA_IO_PENDING.

P>GetQueuedCompletionStatus() возвращаем CompletionKey и Overlapped структуру. Все типа хорошо. Каждый Recv ловится нормально, но с ошибкой SOCKET_ERROR + WSA_IO_PENDING.
P>Я все перерыл, но безуспешно. Не могу понять когда операция завершится, все время PENDING .

P>Может кто подскажет, где баг зарыт. Чувствую, что где-то лажу сделал .


P>Спасибо!!!

Так а нет бага.
WSARecv вам гвоорит сколько было прочтено, естевенно все прочесть наверно не смогло, потому SOCKET_ERROR WSA_IO_PENDING — просто напоминание вам что считано не все что вы спрашивали.
На всяк случае напомню.
Посему нужно самому следить за указателем записи, тоесть к примеру если у вас есть буфер на 1Килобайт, а после чтения функция чтения вернула вам 100, то следующе обращение к функции нужно будет делать с параметрами — ячейка памяти буфера смещенная на 100 и 1024 — 100 байт.
Re: IOCP + (SOCKET_ERROR + WSA_IO_PENDING)
От: Michael Chelnokov Украина  
Дата: 04.06.07 10:15
Оценка:
Здравствуйте, Panerox, Вы писали:

P>Может кто подскажет, где баг зарыт.


В непонимании механизмов. Вам стоило бы сначала почитать статьи и примеры.
Re: IOCP + (SOCKET_ERROR + WSA_IO_PENDING)
От: Detsel Россия  
Дата: 04.06.07 10:44
Оценка:
Здравствуйте, Panerox, Вы писали:

Michael Chelnokov прав. Почитай немного поподробней про порт и работу с ним.
Ссылки на статьи в этом
Автор: Detsel
Дата: 13.09.06
посте.
Re[2]: IOCP + (SOCKET_ERROR + WSA_IO_PENDING)
От: Panerox  
Дата: 04.06.07 10:48
Оценка:
V>Так а нет бага.
V>WSARecv вам гвоорит сколько было прочтено, естевенно все прочесть наверно не смогло, потому SOCKET_ERROR WSA_IO_PENDING — просто напоминание вам что считано не все что вы спрашивали.
V>На всяк случае напомню.
V>Посему нужно самому следить за указателем записи, тоесть к примеру если у вас есть буфер на 1Килобайт, а после чтения функция чтения вернула вам 100, то следующе обращение к функции нужно будет делать с параметрами — ячейка памяти буфера смещенная на 100 и 1024 — 100 байт.

nRecvResult = WSARecv(sClient->scSocket,
&(sClientOverlapped->scDataBuf),
1,
&dwBytes,
&dwFlags,
&(sClientOverlapped->scOverlapped),
NULL);
>>>к примеру если у вас есть буфер на 1Килобайт, а после чтения функция чтения вернула вам 100
В моем случае я отправляю 64 байта, а функция возвращает, что считано 0 и так всегда. Если бы она вернула что считана часть, я бы считал следующую часть и так до конца. Но она возващает всегда 0, вот тут и загвоздка. Я не могу узнать сколько прочитано.

Статьи я почитал и сделал все как было написано, может конечно, что и не понял. Помоги те разъяснить пожалуйста.
Re[3]: IOCP + (SOCKET_ERROR + WSA_IO_PENDING)
От: vasmann  
Дата: 04.06.07 12:44
Оценка:
Здравствуйте, Panerox, Вы писали:

V>>Так а нет бага.

V>>WSARecv вам гвоорит сколько было прочтено, естевенно все прочесть наверно не смогло, потому SOCKET_ERROR WSA_IO_PENDING — просто напоминание вам что считано не все что вы спрашивали.
V>>На всяк случае напомню.
V>>Посему нужно самому следить за указателем записи, тоесть к примеру если у вас есть буфер на 1Килобайт, а после чтения функция чтения вернула вам 100, то следующе обращение к функции нужно будет делать с параметрами — ячейка памяти буфера смещенная на 100 и 1024 — 100 байт.

P> nRecvResult = WSARecv(sClient->scSocket,

P> &(sClientOverlapped->scDataBuf),
P> 1,
P> &dwBytes,
P> &dwFlags,
P> &(sClientOverlapped->scOverlapped),
P> NULL);
>>>>к примеру если у вас есть буфер на 1Килобайт, а после чтения функция чтения вернула вам 100
P>В моем случае я отправляю 64 байта, а функция возвращает, что считано 0 и так всегда. Если бы она вернула что считана часть, я бы считал следующую часть и так до конца. Но она возващает всегда 0, вот тут и загвоздка. Я не могу узнать сколько прочитано.

P>Статьи я почитал и сделал все как было написано, может конечно, что и не понял. Помоги те разъяснить пожалуйста.

Чесно сказать в код вникать лень. Да и время нет.
Могу посоветовать книгу Рихтера "Network Programming for Microsoft Windows", если есть желание вышлю на мыло, она на английском, на русском я так и не нашол ее.
Прочитав тему ИОСП в ней я понял что от меня хотят — вообще книга хорошая.
Re[4]: IOCP + (SOCKET_ERROR + WSA_IO_PENDING)
От: Michael Chelnokov Украина  
Дата: 04.06.07 13:45
Оценка:
Здравствуйте, vasmann, Вы писали:

V>Могу посоветовать книгу Рихтера "Network Programming for Microsoft Windows"


Если Рихтера, то скорее http://gzip.rsdn.ru/res/book/win32/programming_server_apps_w2k.xml
Автор(ы): Джеффри Рихтер, Джейсон Кларк
В книге Джеффри Рихтера и Джейсон Кларка исчерпывающе описаны функции новой операционной системы
Microsoft — Windows 2000, позволяющие создавать высокопроизводительные и
надежные серверные приложения. Менеджер управления службами, контроль
производительности и системных событий, асинхронный ввод-вывод, система
безопасности и защищенное взаимодействие приложений обеспечат надежную и
эффективную работу ваших приложений в качестве служб операционной системы 24
часа в сутки 7 дней в неделю. Все главы содержат примеры, написанные на C++,
демонстрирующие описываемые технологии. Вы можете использовать в своих
приложениях фрагменты этих программ и готовые классы C++, исходные тексты
которых содержатся на прилагаемом компакт-диске. Книга состоит из 12 глав, 2
приложений и предметного указателя. Прилагаемый к книге компакт-диск содержит
программное обеспечение, примеры приложений, документацию и электронную версию
книги.
Re[5]: IOCP + (SOCKET_ERROR + WSA_IO_PENDING)
От: vasmann  
Дата: 04.06.07 13:56
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>Здравствуйте, vasmann, Вы писали:


V>>Могу посоветовать книгу Рихтера "Network Programming for Microsoft Windows"


MC>Если Рихтера, то скорее http://gzip.rsdn.ru/res/book/win32/programming_server_apps_w2k.xml
Автор(ы): Джеффри Рихтер, Джейсон Кларк
В книге Джеффри Рихтера и Джейсон Кларка исчерпывающе описаны функции новой операционной системы
Microsoft — Windows 2000, позволяющие создавать высокопроизводительные и
надежные серверные приложения. Менеджер управления службами, контроль
производительности и системных событий, асинхронный ввод-вывод, система
безопасности и защищенное взаимодействие приложений обеспечат надежную и
эффективную работу ваших приложений в качестве служб операционной системы 24
часа в сутки 7 дней в неделю. Все главы содержат примеры, написанные на C++,
демонстрирующие описываемые технологии. Вы можете использовать в своих
приложениях фрагменты этих программ и готовые классы C++, исходные тексты
которых содержатся на прилагаемом компакт-диске. Книга состоит из 12 глав, 2
приложений и предметного указателя. Прилагаемый к книге компакт-диск содержит
программное обеспечение, примеры приложений, документацию и электронную версию
книги.

Да виноват
Все в голове попутал
а network programming это Anthony Jones and Jim Ohlund
Re[6]: IOCP + (SOCKET_ERROR + WSA_IO_PENDING)
От: Panerox  
Дата: 04.06.07 15:08
Оценка:
Здравствуйте, vasmann, Вы писали:

V>Здравствуйте, Michael Chelnokov, Вы писали:


MC>>Здравствуйте, vasmann, Вы писали:


V>>>Могу посоветовать книгу Рихтера "Network Programming for Microsoft Windows"


MC>>Если Рихтера, то скорее http://gzip.rsdn.ru/res/book/win32/programming_server_apps_w2k.xml
Автор(ы): Джеффри Рихтер, Джейсон Кларк
В книге Джеффри Рихтера и Джейсон Кларка исчерпывающе описаны функции новой операционной системы
Microsoft — Windows 2000, позволяющие создавать высокопроизводительные и
надежные серверные приложения. Менеджер управления службами, контроль
производительности и системных событий, асинхронный ввод-вывод, система
безопасности и защищенное взаимодействие приложений обеспечат надежную и
эффективную работу ваших приложений в качестве служб операционной системы 24
часа в сутки 7 дней в неделю. Все главы содержат примеры, написанные на C++,
демонстрирующие описываемые технологии. Вы можете использовать в своих
приложениях фрагменты этих программ и готовые классы C++, исходные тексты
которых содержатся на прилагаемом компакт-диске. Книга состоит из 12 глав, 2
приложений и предметного указателя. Прилагаемый к книге компакт-диск содержит
программное обеспечение, примеры приложений, документацию и электронную версию
книги.

V>Да виноват
V>Все в голове попутал
V>а network programming это Anthony Jones and Jim Ohlund

Да усе разобрался я . заново все переписал, почти все правильно делал, токо видно слглючило не в ту сторону смотрел
Всем спасибо!!!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.