Я открыл сервер сокетов TCP (я опустил несколько вещей, он взят отсюда
sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol))
Возможно ли получить IP-адрес сервера из sockfd? Если нет, где я должен смотреть?
EDIT: Я хочу знать адрес сервера (это до того, как какой-либо клиент подключится).
Если вы хотите узнать, кто находится на другом конце вашего сокета, вы можете использовать getpeername в Linux. getsockname скажет вам, кто вы. Вы решаете, какой адрес вы хотите, чтобы ваш сервер сидел первоначально, хотя во время привязки .
Вы также можете найти этот SO-вопрос полезным: привязать сокет к сетевому интерфейсу
И книга «Unix Network Programming, vol 1», автор W. Richard Stevens.
Вы не можете использовать сокет, чтобы получить адрес сервера до того, как клиент подключится, потому что он неизвестен.
В принципе, хост может иметь несколько IP-адресов. IP-адрес, используемый для подключения к серверу, относится к интерфейсу, через который было получено соединение. Пока не приходит соединение, неизвестно.
Даже если у вас есть только один IP, соединения могут поступать из машины, и в этом случае адрес будет 127.0.0.1
.
Таким образом, слушающий сокет не имеет информации об IP.
Вам нужно будет найти, какие интерфейсы у машины есть, и каковы их IP-адреса.
Адрес сервера зависит от вас.
Зависит от того, какие параметры передаются функции bind()
.
Вы можете указать single ip
или связать свой сокет с каждым адресом вашего хоста.
Посмотрите на страницу Bind
Адрес сервера – тот, который был передан успешному вызову bind()
(как показано в источнике, который вы связали).