sendto() - одноадресная рассылка UDP в C

У меня есть функция ниже, которая отправляет message в next_hop (например, 192.168.0.10) как одноадресную рассылку UDP. Когда я компилирую код, я получаю следующее предупреждение passing argument 2 of 'sendto' makes pointer from integer without a cast для строки if(sendto(s, *message, BUFSIZE, 0, &si_other, slen) == -1). Как я могу исправить код? Спасибо за ответы.

void log_msg_send(char *message, char *next_hop){

struct sockaddr_in si_other;
int s, slen = sizeof(si_other);
int port_no = 3333;
char *nexthop;
unsigned short Server_port;
nexthop = next_hop;
Server_port = port_no;

if((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
    fprintf(stderr,"socket error");
    exit(1);
}

memset((char *) &si_other, 0, sizeof(si_other));
si_other.sin_family = AF_INET;
si_other.sin_port = htons(Server_port);

if(inet_aton(nexthop, &si_other.sin_addr) == 0){
    fprintf(stderr,"socket error");
    exit(1);
}

if(sendto(s, *message, BUFSIZE, 0, &si_other, slen) == -1){
    fprintf(stderr,"socket error");
    exit(1);
}

close(s);

}


person johan    schedule 21.05.2012    source источник
comment
Почему вы все равно разыменовываете message?   -  person zneak    schedule 21.05.2012
comment
Я удалил *, теперь я получаю следующее предупреждение о передаче аргумента 5 «sendto» из несовместимого типа указателя.   -  person johan    schedule 21.05.2012


Ответы (1)


char * message

Означает:

(char *) message // message is a pointer-to-char

А также:

char (*message) // *message is a char

Поэтому, когда вам нужно передать char*, используйте message. Если вам нужен первый символ в этом буфере, используйте *message.


Предупреждение:

char * a, b; 

Превращает a в char*, а b в простое char, где бы вы ни ставили пробелы.


Пятый аргумент может потребоваться привести к struct sockaddr* вручную, в зависимости от того, как он создан в вашей системе.

person Mat    schedule 21.05.2012