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.
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
@EJP - Danke für die Klärung. – Learner