Вызовы работают, но, поскольку вы не связали сокет явно, операционная система или системная библиотека неявно назначили вам порт и привязку по умолчанию (точно так же, как при вызове connect(2)
без вызова bind(2)
первый). Кроме того, так как вы ранее спрашивали о TCP, я предполагаю, что вы говорите об интернет-сокетах здесь.
Определение имени операционной системы, к которой привязан сокет, зависит от операционной системы, поэтому вам придется искать конкретную ОС, но большинство операционных систем предоставляют netstat
или аналогичный инструмент, который можно использовать для запроса, какие приложения прослушивание на каких портах.,
Как Джон упоминает в комментарии, вы можете использовать getsockname(2)
, чтобы найти имя связанного сокета. Вот краткий пример:
// ...
// Create socket and set it to listen (we ignore error handling for brevity)
int sock = socket(AF_INET, SOCK_STREAM, 0);
listen(sock, 10);
// Sometime later we want to know what port and IP our socket is listening on
socklen_t addr_size = sizeof(struct sockaddr_in);
struck sockaddr_in addr;
getsockname(sock, (struct sockaddr *)&addr, &addr_size);
addr
теперь будет содержать IP-адрес и порт, который прослушивает ваш сокет.