Hi All!
Вот программка (UDP-сервер).
main(int argc, char** argv)
{
   struct sockaddr_in server;
   char buf[1024];
   int sd;
   int rc;
   unsigned short port_num = 9999;
   // Server params
   server.sin_family = AF_INET;
   server.sin_addr.s_addr = htonl(INADDR_ANY);
   server.sin_port = htons(port_num);
   // New socket
   sd = socket (AF_INET,SOCK_DGRAM,0);
   assert(sd != -1);
   // Bind socket to server port
   rc = bind (sd, (struct sockaddr *) &server, sizeof(server));
   assert(rc != -1);
   struct sockaddr_in serv;
   socklen_t serv_len;
   // Main loop
   for(;;)
     {
       rc = recvfrom(sd, buf, sizeof(buf), 0, (struct sockaddr*)&serv, &serv_len);
       buf[rc]= (char) NULL;
       printf("addr = '%u' len = '%u' buf = '%s'\n",serv.sin_addr.s_addr, serv_len, buf);
     }
}
После её запуска я вижу:
addr = '16777343' len = '16' buf = 'HELLO'
Всё здорово! (16777343 - это 127.0.0.1 в network byte order).
Меняем программку слегка:
main(int argc, char** argv)
{
   struct sockaddr_in server;
   char buf[1024];
   int sd;
   int rc;
   unsigned short port_num = 9999;
   // Server params
   server.sin_family = AF_INET;
   server.sin_addr.s_addr = htonl(INADDR_ANY);
   server.sin_port = htons(port_num);
   // New socket
   sd = socket (AF_INET,SOCK_DGRAM,0);
   assert(sd != -1);
   // Bind socket to server port
   rc = bind (sd, (struct sockaddr *) &server, sizeof(server));
   assert(rc != -1);
   // Main loop
   for(;;)
     {
       struct sockaddr_in serv;
       socklen_t serv_len;
       rc = recvfrom(sd, buf, sizeof(buf), 0, (struct sockaddr*)&serv, &serv_len);
       buf[rc]= (char) NULL;
       printf("addr = '%u' len = '%u' buf = '%s'\n",serv.sin_addr.s_addr, serv_len, buf);
     }
}
После её запуска я опять вижу:
addr = '16777343' len = '16' buf = 'HELLO'
Опять всё правильно!
Проблема:
Запускал я это в Gentoo. Всё работало.
А вот затем попробовал с KNOPPIX 5.0 LIVE-DVD.
Скомпилил прогу номер 1 - всё OK!
Затем прогу номер 2 - в поле адреса и длины выводится какая-то 
ху@ня!!!
Если конкретно - 3084534624/32197988328.
В чём разница??? Ну убрал/добавил переменные в тело цикла. И что?
Поведение стабильное!!! Память вроде не течёт (негде).
Что с KNOPPIX'ом???
    
      Ответ на:
      
          комментарий
        от anonymous 
  
    
      Ответ на:
      
          комментарий
        от legk 
  
    
        Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
      
Похожие темы
- Форум [pthread][c][socket] recvfrom возвращает «bad file descriptor». (2011)
 - Форум Не понимаю почему не работает (2013)
 - Форум SOCK_STREAM и особенности работы с ним (2014)
 - Форум [проблема с bind]Прием мультикаста с разных ip, но одинаковых портов (2010)
 - Форум Сокеты передача сообщений между компьютерами. Помогите найти ошибку. (2012)
 
- Форум Проблемка с bind (2003)
 - Форум Таймаут для connect() (2009)
 - Форум Не работает прием Multicast сообщения на втором интрфейсе (2023)
 - Форум Проблема с конструтором std::string и const char* (2008)
 - Форум Помогите разобраться с sendto (2014)