2017-10-04 1 views
0

linux에서 gcc에 다중 스레드 에코 서버를 구현하고 있습니다. 서버 소켓을 포트 번호 3000에 바인드합니다. 아래는 바인딩에 사용되는 코드입니다.서버 소켓이 지정된 포트에 바인딩되지 않았습니다.

EchoServer.c I는 다음과 같이 서버의 포트 번호 47115 결합 볼 그러나

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

.

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으로 포트 번호를 지정하면 임의의 사용되지 않는 포트에 소켓을 바인드합니다. 이것에 대한 가능한 이유는 무엇일까요? 서버가 루트 사용자로 시작되었으며 포트 번호 3000이 사용되지 않고 사용 가능함을 확인했습니다.

답변

1

내 코드에 문제가 있음을 발견했습니다. 서버 소켓 I 그래서이 문제는 네트워크 바이트 순서 함께 할 수있는 뭔가를 가지고

sock_var.sin_port=htons(3000); 

sock_var.sin_port=3000; 

을 변경 한 후 포트 번호 3000에 결합한다.

+1

'sockaddr_in.sin_port'가 'man 페이지'의 '네트워크 바이트 순서의 포트'*로 지정되어 있습니다. * – EJP

+0

@EJP - 정리해 주셔서 감사합니다. – Learner

관련 문제