bindresvport(3) połączenie gniazda z uprzywilejowanym portem IP

SKŁADNIA

#include <sys/types.h>
#include <netinet/in.h>
int bindresvport(int sockfd, struct sockaddr_in *sin);

OPIS

bindresvport() służy do łączenia deskryptora gniazda z uprzywilejowanym anonimowym portem IP, to znaczy z przypadkowo wybranym portem o zakresu od 512 do 1023.

Jeśli powiedzie się bind(2) uruchomiony przez bindresvport() i sin jest różne od NULL, to sin->sin_port będzie zawierać numer przydzielonego portu.

sin może mieć wartość NULL i w tym przypadku sin->sin_family jest przyjmowane jako AF_INET. Jednakże oznacza to również, że bindresvport() nie ma żadnej możliwości, by zwrócić numer przydzielonego portu. (Tę informację można później uzyskać za pomocą getsockname(2)).

WARTOŚĆ ZWRACANA

bindresvport() zwraca 0, gdy zakończy się pomyślnie, a w przeciwnym przypadku zwraca -1 i ustawia errno, wskazując na przyczynę błędu.

BŁĘDY

bindresvport() może się nie powieść z tych samych powodów co bind(2). Ponadto mogą wystąpić następujące błędy:
EACCES
Proces wywołujący nie był uprzywilejowany (a dokładniej: nie miał ustawionego atrybutu CAP_NET_BIND_SERVICE).
EADDRINUSE
Wszystkie uprzywilejowane porty są już używane.
EAFNOSUPPORT (EPFNOSUPPORT w glibc 2.7 i wcześniejszych)
sin jest różny od NULL i sin->sin_family jest różne od AF_INET.

ATRYBUTY

Wielowątkowość (patrz pthreads(7))

Przed wersją 2.17 biblioteki glibc funkcja bindresvport() używała statycznej niechronionej zmiennej, tak więc nie była bezpieczna dla wątków.

Od wersji 2.17 biblioteki glibc funkcja bindresvport() używa blokad, aby chronić dostęp do zmiennej globalnej, więc jest bezpieczna dla wątków.

ZGODNE Z

Nie występuje w POSIX.1-2001. Obecna w systemach BSD, Solaris i wielu innych.

UWAGI

W przeciwieństwie do niektórych implementacji bindresvport(), implementacja glibc ignoruje wartość przekazaną w sin->sin_port podczas wywołania tej funkcji.

O STRONIE

Angielska wersja tej strony pochodzi z wydania 3.71 projektu Linux man-pages. Opis projektu, informacje dotyczące zgłaszania błędów, oraz najnowszą wersję oryginału można znaleźć pod adresem http://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Andrzej Krzysztofowicz (PTM) <[email protected]>, Robert Luberda <[email protected]> i Michał Kułach <[email protected]>.

Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 3.71 oryginału.