ソケット - 割り当てられたポートとアドレスを確認する方法 質問する

ソケット - 割り当てられたポートとアドレスを確認する方法 質問する

これを理解するのに苦労しています - このガイドを使用して 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 とポートを確認するにはどうすればよいでしょうか?

ベストアンサー1

サーバーソケットの場合は、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 アドレスを確認できます。

おすすめ記事