В общем, проблема закрытия сокета.
Программа слушает порт:
listenfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
int x = 1;
setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &x, sizeof (x));
и т.д.
при коннекте, получает дескриптор:
clientfd = accept(listenfd, (struct sockaddr *) &cliaddr, &clilen);
потом clientfd передается процессу, запущенному через fork().
он его пытается закрыть через close(clientfd). Результат - состояние "CLOSE_WAIT" соединения.
Как я понимаю, close(clientfd) не работает из-за fork()'a. Если запустить fork() в родительском потоке - все нормально закроется.
Я читал про то, что дочерный процесс не может изменять данные родителя - ядро ему делает только копию родителя. Но, если у него копия данных родителя, то почему не работает системный вызов ? Ведь, номер дескриптора не изменился.
Возможно ли в принципе закрыть сокет, который был передан родительским процессом дочерному ?

Ответ на:
комментарий
от Die-Hard

Ответ на:
комментарий
от nial


Ответ на:
комментарий
от Die-Hard

Ответ на:
комментарий
от roller

Ответ на:
комментарий
от nial

Ответ на:
комментарий
от nial

Ответ на:
комментарий
от klalafuda

Ответ на:
комментарий
от nial

Ответ на:
комментарий
от cvv

Ответ на:
комментарий
от UncleAndy

Ответ на:
комментарий
от Die-Hard

Ответ на:
комментарий
от Die-Hard

Ответ на:
комментарий
от cvv

Ответ на:
комментарий
от Die-Hard

Ответ на:
комментарий
от cvv

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Бесконечный accept() вешает систему (2014)
- Форум Сокеты (2019)
- Форум проблема с сокетами [C] (2009)
- Форум Переподключиться клиенту к TCP серверу (2024)
- Форум [проблема с bind]Прием мультикаста с разных ip, но одинаковых портов (2010)
- Форум не биндится сокет к 80 порту (2017)
- Форум Подсчет числа возможных открытых TCP-портов (2011)
- Форум Пример программы UDP-сервера (2014)
- Форум SOCK_STREAM и особенности работы с ним (2014)
- Форум вопрос по сокету (2009)