table of contents
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¶
- EBADF
- sockfd nie jest prawidłowym deskryptorem.
- EINVAL
- 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.
- EACCES
- Adres jest chroniony, a użytkownik nie jest superużytkownikiem.
- ENOTSOCK
- Argument jest deskryptorem pliku, a nie gniazda.
Następujące błędy odnoszą się do gniazd domeny UNIX-owej (AF_UNIX):
- EINVAL
- Parametr addrlen jest nieprawidłowy, lub gniazdo nie należy do rodziny AF_UNIX.
- EROFS
- I-węzeł gniazda rezyduje na systemie plików przeznaczonym tylko do odczytu.
- EFAULT
- my_addr wskazuje poza dostępną dla użytkownika przestrzeń adresową.
- ENAMETOOLONG
- my_addr jest zbyt długie.
- ENOENT
- Plik nie istnieje.
- ENOMEM
- Brak pamięci kernela.
- ENOTDIR
- Element składowy ścieżki nie jest katalogiem.
- EACCES
- Brak praw do przeszukiwania dla składnika ścieżki.
- ELOOP
- 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 |