7

TCPソケットサーバーを開きました(いくつか省略しました。ここから取得します

sockfd = socket(p->ai_family, p->ai_socktype,
            p->ai_protocol))

sockfd からサーバーの IP アドレスを取得することは可能ですか? そうでない場合、どこを見ればよいですか?

EDIT:サーバーのアドレスを知りたいです(これはクライアントが接続する前です)。

4

4 に答える 4

12

ソケットの反対側に誰がいるか知りたい場合は、Linux でgetpeernameを使用できます。getsocknameは、あなたが誰であるかを教えてくれます。ただし、バインド時にサーバーを最初に配置するアドレスを決定します。

この SO の質問も役に立つかもしれません: bind socket to network interface

また、W. Richard Stevens 著の本「Unix Network Programming, vol 1」。

于 2013-02-05T15:56:20.303 に答える
3

クライアントが接続する前にソケットを使用してサーバーのアドレスを取得することはできません。

原則として、ホストは複数の IP を持つことができます。サーバーへの接続に使用される IP は、接続が到達したインターフェイスに属する IP です。接続が到着するまで、それはわかりません。
IP が 1 つしかない場合でも、マシン内から接続が到着する場合があります。その場合、アドレスは127.0.0.1.

したがって、リッスン ソケットには IP に関する情報がありません。
マシンが持つインターフェイスと、その IP を見つける必要があります。

于 2013-02-05T16:10:25.123 に答える
1

サーバーのアドレスはあなた次第です。

関数に渡されるパラメーターによって異なりbind()ます。

ソケットを指定するsingle ipか、ホストのすべてのアドレスにバインドできます。

バインドのマニュアルページを見てください

于 2013-02-05T16:08:16.427 に答える
0

サーバーのアドレスは、成功した呼び出しに渡されたbind()ものです(リンクしたソースに示されているように)。

于 2013-02-05T17:50:11.923 に答える