В общем, проблема закрытия сокета.
Программа слушает порт:
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
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.