服务器套接字不绑定到指定的端口
问题描述:
我在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);
所以,这个问题已经得到的东西做的网络字节顺序之后。
这与'sockaddr_in.sin_port'被指定为网络字节顺序中的端口','man'页面中的*有关* – EJP
@EJP - 感谢您的澄清。 – Learner