服务器套接字没有绑定到指定端口

时间:2017-10-04 06:51:12

标签: linux sockets gcc

我正在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未使用且可用。

1 个答案:

答案 0 :(得分:1)

我发现我的代码存在问题。更改

后,服务器套接字绑定到端口号3000
sock_var.sin_port=3000;

sock_var.sin_port=htons(3000);

所以,这个问题与网络字节顺序有关。