Асинхронные сокеты

Модератор: Модераторы разделов

n1tr0gen
Сообщения: 149

Асинхронные сокеты

Сообщение n1tr0gen »

Под windows можно использовать асинхронные сокеты. В этом случае при появлении данных для чтения например, вызывается указанная программистом функция обратного вызова, что впринципе достаточно удобно. В linux похожую функциональность конечно можно получить используя неблокирующие сокеты + библиотеку qt (QSocketNotifier). Но ради этого держать в зависимостях qt как минимум очень глупо. Все остальные варианты, которые я знаю, сводятся к постоянному опросу состояния сокета в неблокирующем режиме на предмет поступивших данных. Подскажите, как поступают в данном случае? Моя программа должна выполнять свою работу и прерываться на обработку только если есть поступившие данные.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Асинхронные сокеты

Сообщение elide »

ну запусти отдельный поток, который будет мониторить сокет, переодически засыпая, а если обнаружит данные, то дернет callback или пошлет сообщение. в чем проблема?
слава роботам!
Спасибо сказали:
n1tr0gen
Сообщения: 149

Re: Асинхронные сокеты

Сообщение n1tr0gen »

А каким способом лучше создавать поток? При использовании fork например разделяемой получается только "секция" кода, а данные у каждого процесса свои. Использовать pthread_create?
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Асинхронные сокеты

Сообщение elide »

можно использовать pthreads. можно nptl. а можно почитать man clone
нет способа "лучше", есть способ, который работает в твоем случае (:
слава роботам!
Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: Асинхронные сокеты

Сообщение d_n_k »

есть библеотека gnet
http://www.gnetlibrary.org/
все сказанное есть имхо...
Спасибо сказали: