Главная страница
    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.031 c
3-1081161522
Smalik
2004-04-05 14:38
2004.05.02
Типы полей при работе с Access


7-1079437536
dik
2004-03-16 14:45
2004.05.02
Последовательный порт


14-1081844227
serge35
2004-04-13 12:17
2004.05.02
Отдал ноутбук админам


11-1065880939
Hamer1
2003-10-11 18:02
2004.05.02
Как экстрактировать Ресурс


3-1080887851
Belkova
2004-04-02 10:37
2004.05.02
Новый user





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский