![]() |
|
Модераторы: feodorv |
![]()
|
|
| 12usver12 |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: нет Всего: 1 |
Тренируюсь с реализацией слушающего сервера на winsock events , все хорошо получается но не могу уловить одного момента
вот код сервера, убрал fail проверки, чтобы не загромождать код
клиент
вцелом модель работает замечательно , WSAWaitForMultipleEvents без проблем реагирует на соединения новых клиентов и отправки с их стороны данных, но при коннекте нового клиента событие FD_WRITE (возможность отправки данных) предоставляется только один раз при accepte нового сокета клиента
таким образом отправить клиенту данные я могу только если он первый отправит данные (при этом я получу событие FD_READ|FD_WRITE) или приконнектиться, в других случаях FD_WRITE так и не приходит А как мне быть если я хочу отправить несколько сообщений клиенту (WSASend) не дожидаясь пока он что-то пошлет ? пробовал ставить WSAWaitForMultipleEvents с таймаутом и дальше просто делать WSASend/send не получив соответственно событие FD_WRITE и получаю ошибку WSAEWOULDBLOCK |
||||||
|
|||||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 10 Всего: 45 |
Откуда такое заключение? FD_WRITE происходит в двух случаях:
Я лично не надеюсь на приход FD_WRITE сразу после connect/accept и спокойно пишу в сокет (сокет и так готов для записи). И другое дело второй случай. Тогда жду FD_WRITE и переповторяю попытку записи. Иными словами, если при записи не было WSAEWOULDBLOCK, то писать в (присоединённый) сокет можно сколько угодно. Более того, ждать прихода FD_WRITE, чтобы осуществить запись в сокет, бесполезно. Система не будет вас беспрерывно снабжать сообщениями FD_WRITE, когда сокет и так доступен для записи. Если приключился WSAEWOULDBLOCK, то необходимо ждать FD_WRITE. Это сообщение отредактировал(а) feodorv - 23.12.2011, 22:20 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: нет Всего: 1 |
спс за ответ , все верно - разобрался теперь... половину что я написал выше - неправильно, глюкнуло меня очевидно глубокой ночью
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |