服务器套接字不绑定到指定的端口

问题描述:

我在linux下的gcc中实现了一个多线程的echo服务器。我将服务器套接字绑定到端口号3000。以下是我用于绑定的代码。服务器套接字不绑定到指定的端口

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)); 

但是我看到,服务器,如下所示地结合端口号47115

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 

按我的理解,只有指定端口号0将套接字绑定到一个随机的未使用的端口。这可能是什么原因?服务器以root用户身份启动,我确认端口号3000未使用且可用。

我发现问题与我的代码。该服务器套接字绑定到的端口号3000我改变

sock_var.sin_port=3000; 

sock_var.sin_port=htons(3000); 

所以,这个问题已经得到的东西做的网络字节顺序之后。

+1

这与'sockaddr_in.sin_port'被指定为网络字节顺序中的端口','man'页面中的*有关* – EJP

+0

@EJP - 感谢您的澄清。 – Learner