Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Проблема с функцией recvfrom()


Автор: LisAnd 23.7.2009, 13:30
У меня не получается принять адрес отправителя датограммы.
Если два последних параметра в функции ставля как NULL прием датограмм идет. А если вписываю как полагается указатель на структуру адреса и указатель на переменную для хранения размера адреса приема нет. Раньше на Slackware Linux всё получалось, не получалось на Linux Open Suse, хотя запускал один и тот же код. Теперь и на Slackware Linux не работает.

функцию я вызываю так:

unsigned int addr_size;
struct sockaddr_in AddrClient;
unsigned char PaketRecv[255];
int SokServerListen;
...
recvfrom(SokServerListen,&PaketRecv,sizeof(PaketRecv),0,(struct sockaddr *)&AddrClient,&addr_size);

Автор: xvr 24.7.2009, 11:41
Переменную addr_size надо проинициализировать размером буфера под адрес:
Код

struct sockaddr_in AddrClient;
unsigned int addr_size = sizeof(AddrClient); // <<<
unsigned char PaketRecv[255];
int SokServerListen;
...
recvfrom(SokServerListen,&PaketRecv,sizeof(PaketRecv),0,(struct sockaddr *)&AddrClient,&addr_size);


Автор: LisAnd 24.7.2009, 13:02
Причену возникновения ошибки нашел. Похоже возникало наложение переменных. А вот почему оно возникало пока еще не известно. Сделал присвоение переменной длины адреса присвоение начального значения, пока работает   smile  . Но по моему опять где нибудь вылезет  smile

Добавлено через 14 минут и 24 секунды
xvr, пордон, с утра глянул не увидел ответов а потом как с ошибкой справился сразу отписался. Получается скорее всего тогда это только из-за того что инициализацию не сделал. Просто прога работала и без инициализации, просто объявил перед переменной addr_size другую переменную, вот и подумал что наложение возникает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)