локальные сокеты и многократный bind на один адрес, FleX, 23-Янв-09, 06:28 [смотреть все]Здравствуйте, помогите разобраться. Пробую написать мультипоточный демон на си++ использующий для связи клиент-сервер локальные сокеты (AF_UNIX). Все потоки сервера должны слушать один и тот же локальный адрес, скажем, "./dserver.sock", но сделать bind получается только для одного потока. Поиском нашел решение только для AF_INET сокетов: помог бы флаг "SO_REUSEADDR", но для локальных сокетов (AF_UNIX) он бесполезен. Как же сделать мультипоточность, чтобы сервер смог слушать и обрабатывать одновременно "./dserver.sock" ? Спасибо!
ps. тип сокета SOCK_STREAM, возможно использовать нужно другой тип и флаг заработает?
|
- локальные сокеты и многократный bind на один адрес, from_mars, 06:48 , 23-Янв-09 (1)
Может вам попробовать так:// основной поток серевера s = socket(); bind(s); listen(s); while (1) { c = accept(s); // далее создаем поток или выбираем созданный поток из пула потоков // и отдаем ему c } Для AF_INET такой вариант работает, не знаю как дело будет с AF_UNIX, не когда под них не прогал раннее :)
- локальные сокеты и многократный bind на один адрес, FleX, 18:08 , 23-Янв-09 (3)
>[оверквотинг удален] >while (1) { > c = accept(s); > // далее создаем поток или выбираем созданный поток из пула >потоков > // и отдаем ему c >} > >Для AF_INET такой вариант работает, не знаю как дело будет с AF_UNIX, > >не когда под них не прогал раннее :) Спасибо! так получилось все что нужно, теперь главный поток управляющий, а остальные рабочии. Теперь пробую найти докумендация, как сделать именно пул потоков, как вы написали, чтобы не создавать каждый раз новый поток при запросе, а давать сигнал существующему.
- локальные сокеты и многократный bind на один адрес, devcoder, 19:17 , 23-Янв-09 (4)
> Теперь пробую найти докумендация, как сделать именно пул потоков, как >вы написали, чтобы не создавать каждый раз новый поток при запросе, >а давать сигнал существующему. У. Р. Стивенс UNIX. Разработка сетевых приложений 3-е издание
- локальные сокеты и многократный bind на один адрес, FleX, 22:06 , 23-Янв-09 (5)
>> Теперь пробую найти докумендация, как сделать именно пул потоков, как >>вы написали, чтобы не создавать каждый раз новый поток при запросе, >>а давать сигнал существующему. > >У. Р. Стивенс >UNIX. Разработка сетевых приложений >3-е издание Спасибо! Нашел, уже читаю, правда только 2-е издание (отсканированое, в очень плохом качестве), 3-его вроде как нет нигде :-( надеюсь разберусь что к чему и примеры там найду. пока что понял, что нужно использовать мьютексы и pthread_cond_t совместно для сигналов созданым ранее потокам. дочернии потоки блокируются, пока родительский поток не подаст сигнал о том, что очередь не пуста. далее разблокируем мьютекс и запускаем поток. как-то так.
- локальные сокеты и многократный bind на один адрес, Michelnok, 11:43 , 23-Янв-09 (2)
> >Пробую написать мультипоточный демон на си++ использующий для связи клиент-сервер локальные сокеты >(AF_UNIX). Все потоки сервера должны слушать один и тот же локальный >адрес, скажем, "./dserver.sock", но сделать bind получается только для одного потока. Используй один сокет для всех потоков.
|