Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.059 c
14-1081405937
Игорь Шевченко
2004-04-08 10:32
2004.05.02
Хочу сказать спасибо создателям сайта и тем, кто над ним трудится


14-1081361159
Undert
2004-04-07 22:05
2004.05.02
Ааааа.... помогите с регулярным выражением в mod rewrite


3-1081178285
olhovik
2004-04-05 19:18
2004.05.02
Добавление записи в файл


1-1082013961
Yanis
2004-04-15 11:26
2004.05.02
Cursors


1-1081932841
Pavel
2004-04-14 12:54
2004.05.02
Захват изображения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский