Wrapper Function: Problem bei der Parameter übergabe
-
Erstmal Hallo
Ich will einen Server unter Linux schreiben.Ich will für die Funktion bind() eine Wrapperfunction schreiben. Ich muss irgendwo einen fehler bei der Parameterübergabe machen. Wenn ich bind() nehme funktioniert alles wunderbar aber wenn ich Bind() nehme geht nix.
Fehlermeldung bei Bind():
bind(): Cannot assign requested address
Hier der Wrapper
int Bind(int sock,const struct sockaddr *host_addr,socklen_t host_addr_len) { if(bind(sock,(struct sockaddr *) &host_addr,host_addr_len)==-1) { perror ("bind()"); exit (EXIT_FAILURE); } return 1; }
HIer der Aufruf
Bind(sock,&host_addr,sizeof(host_addr));
Steh gerade auf dem Schlauch..hoffe könnt helfen.
-
Zed(gast) schrieb:
[cpp]bind(sock,*(struct sockaddr ) &host_addr,host_addr_len)[/cpp]
Das sieht etwas komisch aus, da bekommst Du doch ohnehin schon einen Zeiger, warum hantierst Du da noch mit einer herumgecasteten Adresse dieses Zeigers herum?
-
Hochinteressant wäre ja auch mal der Inhalt von host_addr den Du an bind übergibst
-
Ich glaub nicht das host_addr interessant ist. Da bind tadellos funktioniert.
struct sockaddr_in host_addr (Standart socket definition)
Hab gerad den Code nicht da. Aber ist mit IPv4, Port 2222 und soll auf alle Addressen de PC hören. Mehr ist das nicht.Nur die Wrapper funktioniert nicht. Also ist das Problem bei der Prammeterübergabe.
Könnte jemand vielleicht nen bsp Wrapper schreiben.
-
Okay, Du übergibst einen Zeiger an den Wrapper. bind erwartet einen Zeiger. Mit &host_addr im Wrapper machst Du nun einen Zeiger auf den Zeiger. Da Du dem Compiler aber noch sagst (durch den Cast) "ich weiss, dass das eigentlich nicht stimmt, aber ich will dass dieser Zeiger als struct sockaddr* interpretiert wird", kommt natürlich auch keine Warnung...
int Bind(int sock,const struct sockaddr *host_addr,socklen_t host_addr_len) { if(bind(sock,host_addr,host_addr_len)==-1) { perror ("bind()"); exit (EXIT_FAILURE); } return 1; }