Получить локальный IP-адрес для сокета - PullRequest
2 голосов
/ 12 марта 2012

Я ищу локальный IP-адрес только что созданного сокета.Мне нужно иметь возможность поддерживать сервер с несколькими сетевыми картами и сообщать запрашивающему клиенту, какой прямой IP-адрес будет подключаться позже.Я использую для следующего кода:

Socket rsock = null;
rsock= new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
rsock.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, 0);
rsock.Bind(new IPEndPoint(IPAddress.IPv6Any, port));
rsock.Listen((int)SocketOptionName.MaxConnections);

После этого момента .LocalEndPoint вылетает: [::]:PORT.

Фон: Причина, по которой яНужен IP-адрес, который вторичное соединение другого клиента должно будет вернуть на этот конкретный сервер.Эти серверы, вероятно, будут находиться за балансировщиком нагрузки для первоначального выбора сервера, поэтому клиент не может разрешить IP-адрес на основе имени хоста.

1 Ответ

1 голос
/ 12 марта 2012

Поскольку вы привязываетесь к IPAddress.IPv6Any, информация о конечной точке не будет доступна до того, как произойдет первая операция ввода-вывода. документация гласит:

Если вы разрешите системе назначить локальный IP-адрес вашего сокета и номер порта, свойство LocalEndPoint будет установлено после первого Операция ввода / вывода. Для протоколов, ориентированных на соединение, первый ввод / вывод операция будет вызовом метода Connect или Accept.

Итак, в вашем случае вам нужно будет позвонить Accept(), прежде чем получить доступ к LocalEndPoint, чтобы получить значимую информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...