Я готовлюсь к простому рабочему проекту и пытаюсь ознакомиться с основами сокетного программирования в среде Unix dev. На данный момент у меня есть некоторый базовый серверный код и настройка клиентского кода для связи. В настоящее время мой клиентский код успешно подключается к коду сервера и серверный код отправляет ему тестовое сообщение, после чего оба завершаются. Отлично! Это именно то, чего я хотел достичь. Сейчас я играю с функциями, используемыми для получения информации о двух средах (сервер и клиент). Я хотел бы получить локальный IP-адрес и динамически назначенный TCP-порт клиента. Для этого я нашел функцию getsockname()
...
//setup the socket
if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1)
{
perror("client: socket");
continue;
}
//Retrieve the locally-bound name of the specified socket and store it in the sockaddr structure
sa_len = sizeof(sa);
getsock_check = getsockname(sockfd,(struct sockaddr *)&sa,(socklen_t *)&sa_len) ;
if (getsock_check== -1) {
perror("getsockname");
exit(1);
}
printf("Local IP address is: %s\n", inet_ntoa(sa.sin_addr));
printf("Local port is: %d\n", (int) ntohs(sa.sin_port));
но на выходе всегда ноль ...
Local IP address is: 0.0.0.0
Local port is: 0
кто-нибудь видит что-то, чем я могу быть, или я определенно делаю неправильно?
Заранее большое спасибо за вашу помощь!