Re[10]: Одновременное клиент-соединение со 100 компьютерами
От: Аноним  
Дата: 06.11.05 21:47
Оценка: +1
Здравствуйте, Kemm, Вы писали:

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


VDB>>>Да, и еще. То, что connect() происходит в блокирующем режиме — так и задумано?

A>>Не совсем но, насколько я понимаю, fcntl надо вызывать сразу после connect?

K>А как тогда connect() может не заблокироваться, если сокет не переведен в неблокирующий режим? 8)) Как раз наоборот -- сразу после создания клиентского сокета.


Верно.

A>>В общем мой вариант, описанный выше, работает, с одной доработкой. Я &readset очищаю и заполняю каждый раз в цикле перед вызовом Select заново. Нигде в документации я не смог найти, почему так. Но по тестам у меня получилось, что Select после того, как срабатывает, очищает &readset? Или может он удаляет из него все дескрипторы, которые не сработали? Подскажите, что в действительности происходит?


K>Кстати, да. Я не обратил внимания на работу с fd_set. В мане же написано:

K>On return, select() replaces the given descriptor sets with subsets consisting of those descriptors that are ready for the requested operation.

K>Иначе бы FD_ISSET() и не работал бы. 8)) Поэтому обычно все обнуляется и заполняется заново.


Мало того, я бы еще для бОльшей переносимости (если это нужно), и значение тайм-аута советовал бы заново заполнять.
Не все реализации оставляют его неизменным.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.