Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C, Linux, переача сокета дочерему процессу

1.2K
30 июня 2010 года
piroman17
175 / / 20.07.2006
Делаю в таком порядке:
1) создаю pipe
2) fork();
Далее в родительском процессе:
3.parent) socket()
4.parent) bind()
5.parent) client=accept()
6.parent) передаю через pipe дочернему процессу cleint
7.worker) пытаюсь записать в сокет, но вылетает ошибка: Bad file descriptor

как я теперь понимаю из дочернего процесса нельзя работать с сокетом родительского, т.к. это разные процессы.

Подскажите пожалуйста путь решения, очень важно выполнять работу с клиентом на воркере.
Спасибо!
5
30 июня 2010 года
hardcase
4.5K / / 09.08.2005
Не являясь специалистом по Linux могу лишь сказать, что вам видимо нужно неким образом сделать дубликат сокета (хэндла на него) - для воркера.
2.1K
30 июня 2010 года
Norgat
452 / / 12.08.2009
создай сокет перед fork(), если оно можно у тебя конечно.

п.с. и неплохо бы ещё мьютекс добавить, для контроля доступа к сокету, если этого нет.
1.2K
30 июня 2010 года
piroman17
175 / / 20.07.2006
нет, сокет перед форк нельзя, количество воркеров постоянно и зависит только от того что написано в конфиге, но не как не от количества соединений.

есть структура для сокета sockaddr, она есть и у клиента, её кто нибудь передавал дочернему процессу? и как из неё сделать тот самый int sockId?
307
30 июня 2010 года
Artem_3A
863 / / 11.04.2008
не помню точно, но кажись, там надо указать общие адресное пространство при создании дочернего процесса.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог