Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> socket (accept), изменить св-ва accept  
V
    Опции темы
fantast
Дата 25.5.2007, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: нет
Всего: 2



привет всем. вопрос в том, как мне изменить свойства  accept так, чтобы он не ждал (если очередь пуста) когда ктонить обратится к серверу с запросом, а сразу выдовал, что желающих нету.
спасибо
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
dumb
Дата 26.5.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 1
Всего: 158



перевести сокет в неблокирующий режим(nonblocking mode).
Код

int block = 1;
ioctlsocket(s, FIONBIO, &block);


только нужно иметь ввиду, что изменится не только работа accept, но и работа всех остальных функций.
PM MAIL   Вверх
fantast
Дата 26.5.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: нет
Всего: 2



супер, спасибо

--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
GremlinProg
Дата 26.5.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 1
Всего: 106



можно и не отключать блокировку (иногда без неё муторно...), используем функцию WSAEventSelect, которая ассоциирует объект ожидания WSAEVENT с необходимым сигналом, в том числе и FD_ACCEPT. Чтобы проверить, сработало ли событие исполльзуем WSAWaitForMultipleEvents с dwTimeout = 0. Только здесь, в отличии от обычных событий (CreateEvent) нельзя создать событие-автомат (может и можно, не нашел), которое само сбрасывается после отработки, т.е. нужно самим его сбрасывать (WSAResetEvent)


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
dumb
Дата 27.5.2007, 04:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 1
Всего: 158



GremlinProgsmile
Цитата(msdn)

The WSAAsyncSelect and WSAEventSelect functions automatically set a socket to nonblocking mode. If WSAAsyncSelect or WSAEventSelect has been issued on a socket, then any attempt to use ioctlsocket to set the socket back to blocking mode will fail with WSAEINVAL.

PM MAIL   Вверх
GremlinProg
Дата 27.5.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 1
Всего: 106



да, dumb, действительно, на слушающем сокете мы из него обычно не читаем, поэтому и проблем нету. Но на клиентском сокете - и читаем и пишем. Правда к accept это не имеет отношения, тем не менее, для полноты изложения надо дополнить
Цитата

To set the socket back to blocking mode, an application must first disable WSAAsyncSelect by calling WSAAsyncSelect with the lEvent parameter equal to zero, or disable WSAEventSelect by calling WSAEventSelect with the lNetworkEvents parameter equal to zero.


Это сообщение отредактировал(а) GremlinProg - 27.5.2007, 12:42


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1200 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.