2017-10-04 1 views
0

Ich implementiere einen Multi-Thread-Echo-Server in gcc unter Linux. Ich binde den Server-Socket an die Portnummer 3000. Unten ist mein Code zum Binden.Server-Socket bindet nicht an den angegebenen Port

EchoServer.c

struct sockaddr_in sock_var; 
int serverFileDiscriptor=socket(AF_INET,SOCK_STREAM,0); 
sock_var.sin_addr.s_addr=inet_addr("0.0.0.0"); 
sock_var.sin_port=3000; 
sock_var.sin_family=AF_INET; 
bind(serverFileDiscriptor,(struct sockaddr*)&sock_var,sizeof(sock_var)); 

aber ich sehe, dass der Server-Portnummer bindet 47115 wie unten gezeigt.

Proto Recv-Q Send-Q Local Address   Foreign Address   State  User  Inode  PID/Program name  
tcp  0  0 0.0.0.0:47115   0.0.0.0:*    LISTEN  0   79942  22843/./EchoServer 

Gemäß meinem Verständnis, die Portnummer als 0 nur spezifiziert die Buchse an einem zufälligen nicht verwendeten Port binden. Was könnte der mögliche Grund dafür sein? Der Server wird als root-Benutzer gestartet und ich habe bestätigt, dass die Portnummer 3000 nicht verwendet wird und verfügbar ist.

Antwort

1

Ich habe das Problem mit meinem Code gefunden. Der Server-Socket bindet an Port-Nummer 3000 nachdem ich

ändern
sock_var.sin_port=3000; 

zu

sock_var.sin_port=htons(3000); 

Also, das Problem etwas zu tun mit der Netzwerk-Byte-Reihenfolge erhalten hat.

+1

Es hat mit der Tatsache zu tun, dass 'sockaddr_in.sin_port' * in der 'man'-Seite * als * Port in Netzwerk-Byte-Reihenfolge * angegeben ist. * – EJP

+0

@EJP - Danke für die Klärung. – Learner

Verwandte Themen