Socket-Programmierung(in C) Linux

harryherold

Grünschnabel
Hallo Leute hab da mal ein Problem zum Thema Socket-Programmierung in C.
Ich deklariere und hol mir speicher wie folgt:

int sock;
ssize_t len;
char mesg[]={'O','K'};
struct sockaddr_in6 *server;
server=malloc(sizeof(struct sockaddr_in6));
len=strlen(mesg);

dann hole ich mir einen socket

sock = socket(AF_INET6,SOCK_DGRAM,IPPROTO_UDP);

dann befülle ich

memset(server,0,sizeof(server));
server->sin6_family=AF_INET6;
server->sin6_port=htons(4910);
if(inet_pton(AF_INET6,"::1/128",server))
{
error_handler("ungueltige IP-Adresse\0");
exit_handler();
}

dann das senden

if((send_byte=sendto(sock,mesg,len+1,0,(struct sockaddr*)server,sizeof(server)))<0)
{
error_handler("Beim Senden ist ein Fehler aufgetreten\0");
exit_handler();
}


close(sock);

Als Fehler kommt "invaild argument"
Wenn ich das struct statisch machen läuft es .
Könnt ihr mir bitte weiter helfen ich bin mit meinem Latein am Ende
Danke im Vorraus******
 
Hallo harryherold und willkommen auf tutorials.de!

Du hast mehrere Fehler gemacht:
char mesg[]={'O','K'};
Dieser String ist nicht nullterminiert. Schreibe besser … = "OK";

if(inet_pton(AF_INET6,"::1/128",server))
Das letzte Argument der Funktion sollte &server->sin6_addr sein, wenn ich mich nicht irre.

error_handler("ungueltige IP-Adresse\0");
Zeichenkettenliterale sind bereits Nullterminiert, die \0 ist also überflüssig. Ist aber kein Fehler im eigentlichen Sinne.

Noch ein Hinweis: Quelltext in Zukunft bitte in Code-Tags ([c]…[/c]) einschließen, das verbessert die Lesbarkeit.

Grüße,
Matthias
 
Zurück