Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: 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 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
14-1081661067
RealRascal
2004-04-11 09:24
2004.05.02
LIST of TMyType


6-1078042857
Ozone
2004-02-29 11:20
2004.05.02
TCP/IP


1-1081838119
Term
2004-04-13 10:35
2004.05.02
Есть ли такой компонент..................?


7-1078760207
Роман
2004-03-08 18:36
2004.05.02
Com-порт против NT Server


1-1081758981
Dima S
2004-04-12 12:36
2004.05.02
StringGrid