Вниз
Скачать: CL | DM;

неблокирующие Сокеты   Найти похожие ветки 

← →
Rezya ©   (2004-03-11 01:30) [0]

Народ Раскажите как работать с неблокирующими сокетми.
А именно что делают следующие функции и переменные:
ioctlsocket,FIONBIO,getpeername,FD_ISSET. И что это за тип данных такой интересный PFdSet.


← →
Digitman ©   (2004-03-11 08:14) [1]

http://book.itep.ru/7/sock_71.htm


← →
Verg ©   (2004-03-11 10:16) [2]

Сокет може работать в нескольких режимах:
1. Блокирующий. В этом режиме сокет создается по-умолчанию ф-цией socket. В этом режиме операции ввода/вывода на нем не вернут управление потоку до тех пор, пока сама операция не закончится каким-либо результатом. Например, recv на таком сокете будет "ждать", пока не появится хоть какая-либо принятая информация, либо не произойдет разрыв соединения. Это же касается и всех остальных операций: запись (send, sendto) - ожидать будем появления свободного места в передающих буферах, connect - ожидать будем результата соединения.
2. Неблокирующий. В этот режим мы можем перевести ранее созданный сокет при помощи ioctlsocket с параметром cmd равным FIONBIO и аргументом = 1. Когда мы определяем сокет как неблокирующий, мы тем самым сообщаем ядру седующее: "когда запрашиваемая нами операция ввода-вывода не может быть завершена без перевода потока в состояние ожидания, следует не переводить поток в состояние ожидания, а возвратит ошибку". Это специальное значение ошибки, когда опреация ввода/вывода/соединения на таком сокете будет завершена немедленно с ошибкой SOKET_ERROR, а WSAGetLastError вернет WSAEWOULDBLOCK. Это нужно понимать так, что ядро сказало: "ок, парни, приступаю к вашей операции. Ждите ответа". Как ждать? Для этого существует два способа: мультиплексирование и поллинг. Что такое поллинг (периодический опрос), я думаю и так понятно. А для мультиплексирования применяется блокируюшщая по-определению ф-ция select в которой описываются множества сокетов, завершения операции в этих сокетах (в любом из множества) она и будет дожидаться. По желанию может дожидаться ограниченное время. Кстати, ф-ция select применима и к блокирующим сокетам.
3. Асинхронный. Это расширение неблокирующего режима. В этот режим сокет мы можем перевести ф-циями WSAAsyncSelect или WSAEventSelect (Winsock 2). Смысл этого режима в том, чтобы заставить ядро самому сообщать о завершении каких-либо операций (возникновении каких-либо событий) на сокете. К сокетам в этом режиме бесполезно применят мультиплексирование (select).

Есть еще модели, типа управлямого сигналоми, но они в MSW не имеют отношения.
Все перечисленные ф-ции хорошо описаны в MSDN.
(На англ. яз. и на С :))
Так что, как тут говорили - хочешь быть программистом - учи английский. А я продолжу - хочешь быть сетевым программистом - учи еще и С.
:)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.036 c
1-1082105019
тихий вовочка
2004-04-16 12:43
2004.05.02
Глупый вопрос об обработке сообщений


14-1081496161
Balkon
2004-04-09 11:36
2004.05.02
Полный Uninstall !


8-1075735647
chsv
2004-02-02 18:27
2004.05.02
последовательность .wmf файлов


1-1082030465
Mol
2004-04-15 16:01
2004.05.02
ComboBox


3-1081343562
wild_arg
2004-04-07 17:12
2004.05.02
Удаление записей из dbf




   Наверх