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)