bindresvport - połączenie gniazda z uprzywilejowanym portem IP
Standardowa biblioteka C (
libc,
-lc)
#include <sys/types.h>
#include <netinet/in.h>
int bindresvport(int sockfd, struct sockaddr_in *sin);
bindresvport() służy do łączenia gniazda
opisanego deskryptorem pliku
sockfd 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)).
bindresvport() returns 0 on success; otherwise -1 is returned and
errno is set to indicate the error.
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 miał
uprawnień (pod Linuksem: proces wywołujący nie
miał zdolności CAP_NET_BIND_SERVICE w przestrzeni
nazw użytkownika pokrywającej jego sieciową
przestrzeń nazw).
- 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.
Informacje o pojęciach używanych w tym rozdziale można
znaleźć w podręczniku
attributes(7).
Interfejs |
Atrybut |
Wartość |
bindresvport() |
Bezpieczeństwo wątkowe |
. glibc >= 2.17: MT-Safe;
glibc < 2.17: MT-Unsafe |
Funkcja
bindresvport() używa statycznej zmiennej które nie
była zabezpieczona przez blokadę przed glibc 2.17, co
nadawało funkcji cechę MT-Unsafe.
Nie występuje w POSIX.1. Obecna w systemach BSD, Solaris i wielu innych.
W przeciwieństwie do niektórych implementacji
bindresvport(), implementacja glibc ignoruje wartość
przekazaną w
sin->sin_port podczas wywołania tej
funkcji.
bind(2),
getsockname(2)
Autorami polskiego tłumaczenia niniejszej strony podręcznika
są: Andrzej Krzysztofowicz <
[email protected]>, Robert
Luberda <
[email protected]> i Michał Kułach
<
[email protected]>
Niniejsze tłumaczenie jest wolną dokumentacją.
Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z
GNU
General Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy
zgłaszać na adres listy dyskusyjnej
[email protected]