Главная страница
    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.041 c
1-1082145132
NeyroSpace
2004-04-16 23:52
2004.05.02
Поток и все все все...


1-1082122909
oleg_v
2004-04-16 17:41
2004.05.02
Форма и компоненты


6-1078989406
AlexS76
2004-03-11 10:16
2004.05.02
Как проверить доступен-ли удаленный компьютер по имени


4-1078338089
deema
2004-03-03 21:21
2004.05.02
Как отменить прорисовку child windows-ов?


6-1079032405
Qwer
2004-03-11 22:13
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский