.\" -*- coding: UTF-8 -*- .\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu) .\" and Copyright 2005-2007, Michael Kerrisk .\" Portions extracted from /usr/include/sys/socket.h, which does not have .\" any authorship information in it. It is probably available under the GPL. .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" .\" Other portions are from the 6.9 (Berkeley) 3/10/91 man page: .\" .\" Copyright (c) 1983 The Regents of the University of California. .\" All rights reserved. .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\" Modified Mon Oct 21 23:05:29 EDT 1996 by Eric S. Raymond .\" Modified 1998 by Andi Kleen .\" $Id: bind.2,v 1.3 1999/04/23 19:56:07 freitag Exp $ .\" Modified 2004-06-23 by Michael Kerrisk .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH bind 2 "3 maja 2023 r." "Linux man\-pages 6.05.01" .SH NAZWA bind \- przywiązuje nazwę do gniazda .SH BIBLIOTEKA Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP) .SH SKŁADNIA .nf \fB#include \fP .PP \fBint bind(int \fP\fIsockfd\fP\fB, const struct sockaddr *\fP\fIaddr\fP\fB,\fP \fB socklen_t \fP\fIaddrlen\fP\fB);\fP .fi .SH OPIS Gdy tworzone jest gniazdo za pomocą \fBsocket\fP(2), istnieje ono w przestrzeni nazw (rodzinie adresów), lecz nie ma przypisanego adresu. \fBbind\fP() przypisuje adres określony w \fIaddr\fP do gniazda odnoszącego się do deskryptora pliku \fIsockfd\fP. \fIaddrlen\fP określa rozmiar, w bajtach, struktury adresowej na którą wskazuje \fIaddr\fP. Tradycyjnie operacja ta była nazywana "przypisaniem nazwy do gniazda". .PP Normalnie, zanim gniazdo \fBSOCK_STREAM\fP będzie mogło odbierać połączenia (zobacz \fBaccept\fP(2)), niezbędne jest przypisanie mu lokalnego adresu za pomocą \fBbind\fP(). .PP 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 systemowego w sekcji 7. Dla \fBAF_INET\fP zobacz \fBip\fP(7), dla \fBAF_INET6\fP zobacz \fBipc6\fP(7), dla \fBAF_UNIX\fP zobacz \fBunix\fP(7), dla \fBAF_APPLETALK\fP zobacz \fBddp\fP(7), dla \fBAF_PACKET\fP zobacz \fBpacket\fP(7), dla \fBAF_X25\fP zobacz \fBx25\fP(7), a dla \fBAF_NETLINK\fP zobacz \fBnetlink\fP(7). .PP Faktyczna struktura przekazywana jako argument \fIaddr\fP będzie zależała od rodziny adresowej. Struktura \fIsockaddr\fP jest zdefiniowana podobnie do: .PP .in +4n .EX struct sockaddr { sa_family_t sa_family; char sa_data[14]; } .EE .in .PP Jedyną funkcją tej struktury jest rzutowanie wskaźnika struktury przekazanego w \fIaddr\fP, aby uniknąć ostrzeżeń kompilatora. Zob. PRZYKŁADY poniżej. .SH "WARTOŚĆ ZWRACANA" Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest \-1 i ustawiane jest \fIerrno\fP wskazując błąd. .SH BŁĘDY .TP \fBEACCES\fP .\" e.g., privileged port in AF_INET domain Adres jest chroniony, a użytkownik nie jest superużytkownikiem. .TP \fBEADDRINUSE\fP Podany adres już jest wykorzystywany. .TP \fBEADDRINUSE\fP (gniazda domeny Internet) Podano zero jako numer portu w strukturze adresu gniazda, lecz przy próbie skojarzenia z portem dynamicznym (efemerycznym), okazało się, że wszystkie numery portów w zakresie portów dynamicznych są aktualnie używane. Więcej informacji w opisie pliku \fI/proc/sys/net/ipv4/ip_local_port_range\fP w podręczniku \fBip\fP(7). .TP \fBEBADF\fP \fIsockfd\fP nie jest prawidłowym deskryptorem pliku. .TP \fBEINVAL\fP .\" This may change in the future: see .\" .I linux/unix/sock.c for details. Gniazdo jest już skojarzone z adresem. .TP \fBEINVAL\fP \fIaddrlen\fP jest nieprawidłowe lub \fIaddr\fP nie jest prawidłowym adresem dla tej domeny gniazda. .TP \fBENOTSOCK\fP Deskryptor pliku \fIsockfd\fP nie odnosi się do gniazda. .PP Następujące błędy odnoszą się do gniazd domeny UNIX\-owej (\fBAF_UNIX\fP): .TP \fBEACCES\fP Brak praw do przeszukiwania dla składowej ścieżki (zob. także \fBpath_resolution\fP(7)). .TP \fBEADDRNOTAVAIL\fP Zażądano nieistniejącego interfejsu lub żądany adres nie jest adresem lokalnym. .TP \fBEFAULT\fP \fIaddr\fP wskazuje poza dostępną dla użytkownika przestrzeń adresową. .TP \fBELOOP\fP Podczas rozwiązywania \fIaddr\fP napotkano zbyt wiele dowiązań symbolicznych. .TP \fBENAMETOOLONG\fP \fIaddr\fP jest zbyt długie. .TP \fBENOENT\fP Fragment ścieżki gniazda odnoszący się do któregoś z katalogów nie istnieje. .TP \fBENOMEM\fP Brak pamięci jądra. .TP \fBENOTDIR\fP Składnik ścieżki nie jest katalogiem. .TP \fBEROFS\fP I\-węzeł gniazda rezyduje na systemie plików przeznaczonym tylko do odczytu. .SH STANDARDY POSIX.1\-2008. .SH HISTORIA .\" SVr4 documents an additional .\" .B ENOSR .\" general error condition, and .\" additional .\" .B EIO .\" and .\" .B EISDIR .\" UNIX-domain error conditions. POSIX.1\-2001, SVr4, 4.4BSD (\fBbind\fP() pojawiło się pierwotnie w 4.2BSD). .SH USTERKI .\" FIXME Document transparent proxy options Nie opisano opcji przezroczystych proxy. .SH PRZYKŁADY Przykładowy program używający \fBbind\fP() z gniazdami domeny Internet można znaleźć w \fBgetaddrinfo\fP(3). .PP .\" listen.7 refers to this example. .\" accept.7 refers to this example. .\" unix.7 refers to this example. Następujący przykład pokazuje sposób na skojarzenie gniazda strumieniowego w domenie uniksowej (\fBAF_UNIX\fP) i akceptować połączenia: .PP .\" SRC BEGIN (bind.c) .EX #include #include #include #include #include #include \& #define MY_SOCK_PATH "/somepath" #define LISTEN_BACKLOG 50 \& #define handle_error(msg) \e do { perror(msg); exit(EXIT_FAILURE); } while (0) \& int main(void) { int sfd, cfd; socklen_t peer_addr_size; struct sockaddr_un my_addr, peer_addr; \& sfd = socket(AF_UNIX, SOCK_STREAM, 0); if (sfd == \-1) handle_error("socket"); \& memset(&my_addr, 0, sizeof(my_addr)); my_addr.sun_family = AF_UNIX; strncpy(my_addr.sun_path, MY_SOCK_PATH, sizeof(my_addr.sun_path) \- 1); \& if (bind(sfd, (struct sockaddr *) &my_addr, sizeof(my_addr)) == \-1) handle_error("bind"); \& if (listen(sfd, LISTEN_BACKLOG) == \-1) handle_error("listen"); \& /* Teraz możemy akceptować nadchodzące połączenia, po jednym naraz, za pomocą accept(2). */ \& peer_addr_size = sizeof(peer_addr); cfd = accept(sfd, (struct sockaddr *) &peer_addr, &peer_addr_size); if (cfd == \-1) handle_error("accept"); \& /* Kod do obsługi nadchodzących połączeń... */ \& if (close(sfd) == \-1) handle_error("close"); \& if (unlink(MY_SOCK_PATH) == \-1) handle_error("unlink"); } .EE .\" SRC END .SH "ZOBACZ TAKŻE" \fBaccept\fP(2), \fBconnect\fP(2), \fBgetsockname\fP(2), \fBlisten\fP(2), \fBsocket\fP(2), \fBgetaddrinfo\fP(3), \fBgetifaddrs\fP(3), \fBip\fP(7), \fBipv6\fP(7), \fBpath_resolution\fP(7), \fBsocket\fP(7), \fBunix\fP(7) .PP .SH TŁUMACZENIE Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys , Andrzej Krzysztofowicz i Michał Kułach . .PP Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License w wersji 3 .UE lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. .PP Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej .MT manpages-pl-list@lists.sourceforge.net .ME .