2012-02-01 9 views
12

Estoy siguiendo junto con la guía de beej de redes y ha estado yendo REALMENTE bien porque entiendo todo muy bien y él lo explica muy bien. Sin embargo, cuando quiero probar algunas de las cosas geniales que me está mostrando, ¡no funcionará !. :(sockaddr_in identificador no declarado

No estoy seguro de dónde exactamente sockaddr_in se declara, pero tal vez alguien aquí será lo que me ayude!

Esto es lo que tengo hasta ahora (probando la conversión de una ip en forma de cadena a una ip a una 4 bytes integral y viceversa):

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netdb.h> 

int main(void) 
{ 
    sockaddr_in sin; 

    inet_pton(AF_INET, "192.168.2.1", &sin.in_addr); 
    char ip[INET_ADDRSTRLEN]; 
    inet_ntop(AF_INET, &sin.in_addr, ip, INET_ADDRSTRLEN); 
    printf("%s\n", ip); 

    return 0; 
} 

una vez más estoy totalmente desorientado en cuanto a donde todo es así que si es algo realmente estúpido de mi parte, siento

Editar: estoy en una Debian Linux distro llamado Mint si eso ayuda en absoluto?

Respuesta

22

The standard dice:

La cabecera definirá la estructura sockaddr_in

Tienes que incluir <netinet/in.h> y declarar sin así:

struct sockaddr_in sin; 
^^^^^^ 

Para averiguar qué necesita la palabra clave struct, vea esto C FAQ. Para resumir, no hay implícita typedef en C.

+0

que fija mi problema principal! netinet/in.h - anotado, gracias! no importa el otro error que puse in_addr en lugar de s_addr: p – user1169094

4

Según ip(7) página del manual, también es necesario

#include <sys/socket.h> 
    #include <netinet/in.h> 
    #include <netinet/ip.h> 
+0

leí la mayor parte de la descripción y no entendí mucho, sin embargo, pero definitivamente usaré esas páginas man para referencia futura en cosas simples como esta. ¡Gracias! – user1169094

Cuestiones relacionadas