Если это сокет сервера, вы должны набрать listen()
на вашем сокете, а затем getsockname()
, чтобы найти номер порта, на котором он прослушивает:
struct sockaddr_in sin;
socklen_t len = sizeof(sin);
if (getsockname(sock, (struct sockaddr *)&sin, &len) == -1)
perror("getsockname");
else
printf("port number %d\n", ntohs(sin.sin_port));
Что касается IP-адреса, если вы используете INADDR_ANY
, то сокет сервера может принимать подключения к любому из IP-адресов аппарата, а сам сокет сервера не имеет определенного IP-адреса. Например, если ваша машина имеет два IP-адреса, вы можете получить два входящих соединения на этом сокете сервера, каждое из которых имеет свой локальный IP-адрес. Вы можете использовать getsockname()
в сокете для определенного соединения (которое вы получаете от accept()
), чтобы выяснить, какой локальный IP-адрес используется в этом соединении.