Scroll to navigation

BIND(2) Podręcznik programisty Linuksa BIND(2)

NAZWA

bind - przywiązanie nazwy do gniazda

SKŁADNIA

#include <sys/types.h>
#include <sys/socket.h>

int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);

OPIS

bind nadaje gniazdu, sockfd, lokalny adres my_addr. my_addr ma długość addrlen bajtów. Tradycyjnie nazywa się to "przyznaniem gniazdu nazwy". Gdy gniazdo jest utworzone za pomocą polecenia socket(2), istnieje ono w przestrzeni nazw (rodzina adresów), ale nie ma przyznanej żadnej nazwy.

Normalnie, zanim gniazdo SOCKET_STREAM będzie mogło odbierać połączenia (zobacz accept(2)), niezbędne jest przypisanie mu lokalnego adresu za pomocą bind.

Reguły dotyczące przywiązywania nazw są różne w różnych rodzinach adresów. Szczegółowe informacje znajdują się na stronach podręcznika man w sekcji 7. Dla AF_INET zobacz ip(7), dla AF_UNIX zobacz unix(7), dla AF_APPLETALK zobacz ddp(7), dla AF_PACKET zobacz packet(7), dla AF_X25 zobacz x25(7), a dla AF_NETLINK zobacz netlink(7).

WARTOŚĆ ZWRACANA

Po pomyślnym zakończeniu, zwracane jest zero. W przeciwnym wypadku zwracane jest -1 i odpowiednio ustawiane errno .

BŁĘDY

sockfd nie jest prawidłowym deskryptorem.
Gniazdo już jest przywiązane do adresu. Może to się zmienić w przyszłości: szczegóły można znaleźć w linux/unix/sock.c.
Adres jest chroniony, a użytkownik nie jest superużytkownikiem.
Argument jest deskryptorem pliku, a nie gniazda.

Następujące błędy odnoszą się do gniazd domeny UNIX-owej (AF_UNIX):

Parametr addrlen jest nieprawidłowy, lub gniazdo nie należy do rodziny AF_UNIX.
I-węzeł gniazda rezyduje na systemie plików przeznaczonym tylko do odczytu.
my_addr wskazuje poza dostępną dla użytkownika przestrzeń adresową.
my_addr jest zbyt długie.
Plik nie istnieje.
Brak pamięci kernela.
Element składowy ścieżki nie jest katalogiem.
Brak praw do przeszukiwania dla składnika ścieżki.
Podczas rozwiązywania my_addr napotkano zbyt wiele dowiązań symbolicznych.

USTERKI

Nie opisano opcji przezroczystych proxy.

ZGODNE Z

SVr4, 4.4BSD (funkcja bind pojawiła się najpierw w BSD 4.2). SVr4 dokumentuje dodatkowe ogólne błędy, EADDRNOTAVAIL, EADDRINUSE i ENOSR oraz dodatkowe błędy domeny UNIX-owej, EIO i EISDIR.

UWAGA

Trzeci argument bind jest w rzeczywistości typu int (i tak jest w BSD 4.*, libc4 i libc5). Pewne zamieszanie w POSIX doprowadziło jego zmiany na obecny socklen_t. Zobacz także accept(2).

ZOBACZ TAKŻE

accept(2), connect(2), listen(2), socket(2), getsockname(2), ip(7), socket(7)

1998-10-03 Linux 2.2