Połączenia działają, ale ponieważ nie wiązałeś jawnie gniazda, system operacyjny lub biblioteka systemowa niejawnie przypisały port i domyślne powiązanie (dokładnie tak samo, jak po wywołaniu connect(2)
bez wywoływania najpierw bind(2)
). Ponadto, ponieważ wcześniej pytałeś o rzeczy związane z TCP, zakładam, że mówisz tutaj o gniazdach internetowych.
Dowiedz się, jaka nazwa systemu operacyjnego jest związana z różnymi systemami operacyjnymi, więc będziesz musiał szukać konkretnego systemu operacyjnego, ale większość systemów operacyjnych zapewnia netstat
lub podobne narzędzie, które można wykorzystać do sprawdzenia, które aplikacje słuchają na których portach.,
Jak wspomina John w komentarzu, można użyć getsockname(2)
, aby znaleźć nazwę związanego gniazda. Oto krótki przykład:
// ...
// 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
będzie teraz zawierać adres IP i numer portu, że gniazdo nasłuchuje.
Wywołanie getsockname() daje adres/port przypisany przez system operacyjny. –
Dobrze, John ... Dodam przykładowy kod. –