The OpenNET Project / Index page

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

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

"локальные сокеты и многократный bind на один адрес"  
Сообщение от FleX on 23-Янв-09, 06:28 
Здравствуйте, помогите разобраться.

Пробую написать мультипоточный демон на си++ использующий для связи клиент-сервер локальные сокеты (AF_UNIX). Все потоки сервера должны слушать один и тот же локальный адрес, скажем, "./dserver.sock", но сделать bind получается только для одного потока. Поиском нашел решение только для AF_INET сокетов: помог бы флаг "SO_REUSEADDR", но для локальных сокетов (AF_UNIX) он бесполезен. Как же сделать мультипоточность, чтобы сервер смог слушать и обрабатывать одновременно "./dserver.sock" ?


Спасибо!

ps. тип сокета SOCK_STREAM, возможно использовать нужно другой тип и флаг заработает?

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

 Оглавление

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


1. "локальные сокеты и многократный bind на один адрес"  
Сообщение от from_mars on 23-Янв-09, 06:48 
Может вам попробовать так:

// основной поток серевера
s = socket();
bind(s);
listen(s);
while (1) {
  c = accept(s);
  // далее создаем поток или выбираем созданный поток из пула потоков
  // и отдаем ему c
}

Для AF_INET такой вариант работает, не знаю как дело будет с AF_UNIX,
не когда под них не прогал раннее :)

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

3. "локальные сокеты и многократный bind на один адрес"  
Сообщение от FleX on 23-Янв-09, 18:08 
>[оверквотинг удален]
>while (1) {
>  c = accept(s);
>  // далее создаем поток или выбираем созданный поток из пула
>потоков
>  // и отдаем ему c
>}
>
>Для AF_INET такой вариант работает, не знаю как дело будет с AF_UNIX,
>
>не когда под них не прогал раннее :)

Спасибо! так получилось все что нужно, теперь главный поток управляющий, а остальные рабочии. Теперь пробую найти докумендация, как сделать именно пул потоков, как вы написали, чтобы не создавать каждый раз новый поток при запросе, а давать сигнал существующему.

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

4. "локальные сокеты и многократный bind на один адрес"  
Сообщение от devcoder (ok) on 23-Янв-09, 19:17 
> Теперь пробую найти докумендация, как сделать именно пул потоков, как
>вы написали, чтобы не создавать каждый раз новый поток при запросе,
>а давать сигнал существующему.

У. Р. Стивенс
UNIX. Разработка сетевых приложений
3-е издание

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

5. "локальные сокеты и многократный bind на один адрес"  
Сообщение от FleX on 23-Янв-09, 22:06 
>> Теперь пробую найти докумендация, как сделать именно пул потоков, как
>>вы написали, чтобы не создавать каждый раз новый поток при запросе,
>>а давать сигнал существующему.
>
>У. Р. Стивенс
>UNIX. Разработка сетевых приложений
>3-е издание

Спасибо! Нашел, уже читаю, правда только 2-е издание (отсканированое, в очень плохом качестве), 3-его вроде как нет нигде :-( надеюсь разберусь что к чему и примеры там найду. пока что понял, что нужно использовать мьютексы и pthread_cond_t совместно для сигналов созданым ранее потокам. дочернии потоки блокируются, пока родительский поток не подаст сигнал о том, что очередь не пуста. далее разблокируем мьютекс и запускаем поток. как-то так.

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

2. "локальные сокеты и многократный bind на один адрес"  
Сообщение от Michelnok (??) on 23-Янв-09, 11:43 
>
>Пробую написать мультипоточный демон на си++ использующий для связи клиент-сервер локальные сокеты
>(AF_UNIX). Все потоки сервера должны слушать один и тот же локальный
>адрес, скажем, "./dserver.sock", но сделать bind получается только для одного потока.

Используй один сокет для всех потоков.

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

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

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




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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