Je suis en train d'implémenter un serveur d'écho multithread dans gcc sous linux. Je lie la socket serveur au numéro de port 3000
. Ci-dessous est mon code utilisé pour la liaison.Le socket serveur ne se lie pas au port spécifié
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));
Cependant, je vois que le serveur se lie au numéro de port 47115
comme indiqué ci-dessous.
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
Selon ma compréhension, en précisant que le numéro de port que 0
lieront le socket à un port inutilisé aléatoire. Quelle pourrait être la raison possible de cela? Le serveur est démarré en tant qu'utilisateur root et j'ai confirmé que le numéro de port 3000
est inutilisé et disponible.
Cela a à voir avec le fait que 'sockaddr_in.sin_port' est * spécifié * pour être 'port dans l'ordre des octets du réseau', * dans la page 'man'. * – EJP
@EJP - Merci de clarifier. – Learner