TCPソケットサーバーを開きました(いくつか省略しました。ここから取得します
sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol))
sockfd からサーバーの IP アドレスを取得することは可能ですか? そうでない場合、どこを見ればよいですか?
EDIT:サーバーのアドレスを知りたいです(これはクライアントが接続する前です)。
TCPソケットサーバーを開きました(いくつか省略しました。ここから取得します
sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol))
sockfd からサーバーの IP アドレスを取得することは可能ですか? そうでない場合、どこを見ればよいですか?
EDIT:サーバーのアドレスを知りたいです(これはクライアントが接続する前です)。
ソケットの反対側に誰がいるか知りたい場合は、Linux でgetpeernameを使用できます。getsocknameは、あなたが誰であるかを教えてくれます。ただし、バインド時にサーバーを最初に配置するアドレスを決定します。
この SO の質問も役に立つかもしれません: bind socket to network interface
また、W. Richard Stevens 著の本「Unix Network Programming, vol 1」。
クライアントが接続する前にソケットを使用してサーバーのアドレスを取得することはできません。
原則として、ホストは複数の IP を持つことができます。サーバーへの接続に使用される IP は、接続が到達したインターフェイスに属する IP です。接続が到着するまで、それはわかりません。
IP が 1 つしかない場合でも、マシン内から接続が到着する場合があります。その場合、アドレスは127.0.0.1
.
したがって、リッスン ソケットには IP に関する情報がありません。
マシンが持つインターフェイスと、その IP を見つける必要があります。
サーバーのアドレスはあなた次第です。
関数に渡されるパラメーターによって異なりbind()
ます。
ソケットを指定するsingle ip
か、ホストのすべてのアドレスにバインドできます。
バインドのマニュアルページを見てください
サーバーのアドレスは、成功した呼び出しに渡されたbind()
ものです(リンクしたソースに示されているように)。