私はこれを理解するのに問題があります-私はこのガイドを使用してCのソケットで作業しています- http://binarii.com/files/papers/c_sockets.txt
私は自動的にIPとポートを取得しようとしています:
server.sin_port = 0; /* bind() will choose a random port*/
server.sin_addr.s_addr = INADDR_ANY; /* puts server's IP automatically */
...
...
bind(int fd, struct sockaddr *my_addr,int addrlen); // Bind function
バインドに成功した後、実際に割り当てられているIPとポートを確認するにはどうすればよいですか?
サーバーソケットの場合は、ソケットで listen()
を呼び出してから、 getsockname()
を呼び出してポート番号を見つける必要があります。それは聞いています:
_struct sockaddr_in sin;
socklen_t len = sizeof(sin);
if (getsockname(sock, (struct sockaddr *)&sin, &len) == -1)
perror("getsockname");
else
printf("port number %d\n", ntohs(sin.sin_port));
_
IPアドレスについては、_INADDR_ANY
_を使用すると、サーバーソケットはマシンのIPアドレスへの接続を受け入れることができ、サーバーソケット自体には特定のIPアドレスがありません。たとえば、マシンに2つのIPアドレスがある場合、このサーバーソケットで、それぞれ異なるローカルIPアドレスを持つ2つの着信接続を取得できます。特定の接続(getsockname()
から取得)のソケットでaccept()
を使用して、その接続で使用されているローカルIPアドレスを見つけることができます。
コード内のコメントが間違っています。 INADDR_ANY
は、サーバーのIPを自動的に配置しません。 mark4oの answer で説明されている理由により、本質的に0.0.0.0を置きます。