Klaus Kleenfelden: C++: Problem mit bind()

Beitrag lesen

Grüß Gott werte Gemeindemitglieder,

Also ich habe ein etwas größeres Projekt und ich bin unter anderem auch für den Netzwerkteil mitverantwortlich(bin darin aber kein Experte :(). Deshalb poste ich ja hier weil ich ein Problem habe und ich nicht weiss wie man es löst. Langer Rede kurzer Sinn, erstmal der Code der den Fehler verursacht:

  
 // Das ist der Beginn einer Funktion die als Thread von pthread_create aufgerufen wird.  
 // Das Programm an sich _muss_ von root gestartet werden. Gibt auch einen Test dafür im Programm.  
 int soc, soc_cli;  
 int y = 1;  
 socklen_t cli_len;  
 struct sockaddr_in6 srv_addr, cli_addr;  
  
 soc = socket(AF_INET6, SOCK_STREAM, 0);  
  
 if(soc == -1) {  
  cerr << "couldn't create socket. socket(); ";  
  perror(NULL);  
  exit(EXIT_FAILURE);  
 }  
  
 srv_addr.sin6_family = AF_INET6;  
 srv_addr.sin6_port = htons(HTTP_PORT);  
  
  
 setsockopt(soc, SOL_SOCKET, SO_REUSEADDR, &y, sizeof(y));  
  
 y = 512;  
 setsockopt(soc, SOL_SOCKET, SO_SNDBUF, &y, sizeof(y));  
  
 y = 255;  
 setsockopt(soc, SOL_SOCKET, SO_RCVBUF, &y, sizeof(y));  
  
 if(bind(soc, (struct sockaddr *)&srv_addr, sizeof(srv_addr)) != 0) {  
  cerr << "Error: binding server socket. bind(); ";  
  perror(NULL);  
  exit(EXIT_FAILURE);  
 }  
  
 if(listen(soc, 8) != 0) {  
  cerr << "Error: listening server socket. listen(); ";  
  perror(NULL);  
  exit(EXIT_FAILURE);  
 }  
  
 // hier käme dann noch der accept()-Teil  

Die Fehlermeldung lautet:

"Error: binding server socket bind(); Cannot assign requested address"

Und wird wie man sieht, von bind() verursacht. Was ist falsch?
Als letztes habe ich den Code von IPv4 auf IPv6 umgerüstet. Bis dahin lief der Code einwandfrei. Habe ich was übersehen, was falsch gemacht?

Zu der Meldung findet man auch nicht besonders viel Hilfreiches mit Google.

Auf Wiedersehen und Viele Grüße

Klaus Kleenfelden