The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Chat"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Chat"  
Сообщение от nonick (ok) on 20-Июн-07, 08:16 
Пытаюсь написать чат )
Столкнулся с проблемой... как обрабатывать несколько клиентов на одном порту? где то слышал что надо использовать функцию select() или poll() только не понимаю, select смотрит изменение в нескольких сокетах сразу... это те сокеты которые получены accept() ?
А как же блокировка процесса accept пока не будет подключения? а если даже не будет блокировки, то select блокирует процесс, а значит не будет новых подключений пока кто нибудь что нибудь не напишет... ) воощем я что то не допонимаю, какие имменно сокеты должна слушать select?

P.S кусочек кода, как пример был бы очень кстати ;)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

  • Chat, NuINu, 14:40 , 20-Июн-07, (1)  
  • Chat, wwwdev, 02:54 , 21-Июн-07, (2)  

Сообщения по теме [Сортировка по времени, UBB]


1. "Chat"  
Сообщение от NuINu (??) on 20-Июн-07, 14:40 
>Пытаюсь написать чат )
>Столкнулся с проблемой... как обрабатывать несколько клиентов на одном порту? где то
>слышал что надо использовать функцию select() или poll() только не понимаю,
>select смотрит изменение в нескольких сокетах сразу... это те сокеты которые
>получены accept() ?
нет селект смотрит только те дескрипторы(в том числе и сокеты) которые ты ему сам задашь смотреть макросом FD_SET

>А как же блокировка процесса accept пока не будет подключения? а если
у ассепта своя блокировка и селекта своя. если хочешь чтобы они работали вместе сначала запускаешь селект и ему говоришь что бы смотрел еще за листен сокетом. Если FD_ISSET вернет что установлен именно листен дескриптор то после этого надо запустить accept на этом дескрипторе. ну и вообщем обработать в цикле все возможные сокеты, которые могли вызвать срабатывание селекта.

есть еще функция poll ей так же можно пользоваться.

>даже не будет блокировки, то select блокирует процесс, а значит не
>будет новых подключений пока кто нибудь что нибудь не напишет... )
>воощем я что то не допонимаю, какие имменно сокеты должна слушать
>select?
>
>P.S кусочек кода, как пример был бы очень кстати ;)

кусочек кода? у меня нету. на эту тему есть на перле у Штайна(там логика описана) стр.360.
А использование селекта на си можно везде найти. хотябы в Шон Уолтон: Создание сетевых приложений в среде Линукс. c. 182

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Chat"  
Сообщение от wwwdev email(??) on 21-Июн-07, 02:54 
>Пытаюсь написать чат )
>Столкнулся с проблемой... как обрабатывать несколько клиентов на одном порту? где то
>слышал что надо использовать функцию select() или poll() только не понимаю,
>select смотрит изменение в нескольких сокетах сразу... это те сокеты которые
>получены accept() ?
>А как же блокировка процесса accept пока не будет подключения? а если
>даже не будет блокировки, то select блокирует процесс, а значит не
>будет новых подключений пока кто нибудь что нибудь не напишет... )

Блокирует не более чем на значение таймаута, которое передаешь в select().
Если слушать одновременно также listen-сокеты, то при подключениях тоже будет срабатывать select().

>воощем я что то не допонимаю, какие имменно сокеты должна слушать
>select?

Вообще говоря, он слушает файловые дескрипторы, не только сокеты.

>
>P.S кусочек кода, как пример был бы очень кстати ;)

Вот тут простой пример http://nonblock.tripod.com/ds.html


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру