NAZWA¶
bindresvport - 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.
ZOBACZ TAKŻE¶
bind(2),
getsockname(2)
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) <ankry@mif.pg.gda.pl>, Robert
Luberda <robert@debian.org> i Michał Kułach
<michal.kulach@gmail.com>.
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.