В общем, проблема закрытия сокета.
Программа слушает порт:
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)
 - Форум [проблема с bind]Прием мультикаста с разных ip, но одинаковых портов (2010)
 - Форум проблема с сокетами [C] (2009)
 - Форум Подсчет числа возможных открытых TCP-портов (2011)
 - Форум не биндится сокет к 80 порту (2017)
 
- Форум Переподключиться клиенту к TCP серверу (2024)
 - Форум О любимом, о broadcast socket (2002)
 - Форум вопрос по сокету (2009)
 - Форум Пример программы UDP-сервера (2014)
 - Форум Сокеты. (2004)