2013-12-05 2 views
0

Я не могу понять это. Может кто-нибудь сказать мне, почему я получаю эту ошибку:предупреждение: передача аргумента 2 из 'getsockname' из несовместимого указателя типа

warning: passing argument 2 of ‘getsockname’ from incompatible pointer type

В следующем коде:

#include <arpa/inet.h> 
#include <netinet/in.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <strings.h> 
#include <sys/socket.h> 

int main() { 
    int sd; 
    struct sockaddr_in my_addr; 

    bzero(&my_addr,sizeof(my_addr)); 
    my_addr.sin_family = AF_INET; 
    my_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); 
    my_addr.sin_port = htons(0); 
    my_addr.sin_addr.s_addr = INADDR_ANY; 
    socklen_t my_addr_size = sizeof my_addr; 

    if((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { 
     fprintf(stdout, "Cannot create socket for master socket.\n"); 
      fprintf(stdout, "Terminating program\n\n"); 
       exit(1); 
    } 

    if (bind(sd, (struct sockaddr *)&my_addr, sizeof(my_addr)) < 0) { 
     fprintf (stdout, "Binding failed for master socket\n\n"); 
      perror("bind failed"); 
       exit (1); 
    } 

    if (getsockname(sd, &my_addr, &my_addr_size) == -1) { 
     perror("getsockname() failed"); 
      return -1; 
    } 
} 

ответ

4

Второй аргумент getsockname должен быть struct sockaddr *. Вы передаете адрес struct sockaddr_in.

+3

Спасибо! Этот аргумент просто нуждается в приведении в 'struct sockaddr *'. – Alex

+0

Рад, что я мог помочь. –

Смежные вопросы