.\" -*- coding: UTF-8 -*-
.\" Copyright (c) 1983, 1990, 1991 The Regents of the University of California.
.\" All rights reserved.
.\"
.\" SPDX-License-Identifier: BSD-4-Clause-UC
.\"
.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
.\" Modified 1996-10-21 by Eric S. Raymond <esr@thyrsus.com>
.\" Modified 1998-2000 by Andi Kleen to match Linux 2.2 reality
.\" Modified 2002-04-23 by Roger Luethi <rl@hellgate.ch>
.\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
.\" 2008-12-04, mtk, Add documentation of accept4()
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH accept 2 "4 grudnia 2022 r." "Linux man\-pages 6.03" 
.SH NAZWA
accept, accept4 \- przyjmuje połączenia na gnieździe
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <sys/socket.h>\fP
.PP
\fBint accept(int \fP\fIsockfd\fP\fB, struct sockaddr *_Nullable restrict \fP\fIaddr\fP\fB,\fP
\fB           socklen_t *_Nullable restrict \fP\fIaddrlen\fP\fB);\fP
.PP
\fB#define _GNU_SOURCE\fP             /* zobacz feature_test_macros(7) */
\fB#include <sys/socket.h>\fP
.PP
\fBint accept4(int \fP\fIsockfd\fP\fB, struct sockaddr *_Nullable restrict \fP\fIaddr\fP\fB,\fP
\fB           socklen_t *_Nullable restrict \fP\fIaddrlen\fP\fB, int \fP\fIflags\fP\fB);\fP
.fi
.SH OPIS
Wywołanie systemowe \fBaccept\fP() jest używane z połączeniowymi typami gniazd
(\fBSOCK_STREAM\fP, \fBSOCK_SEQPACKET\fP). Wyciąga ona pierwsze żądanie połączenia
z kolejki oczekujących połączeń dla nasłuchującego gniazda \fIsockfd\fP, tworzy
nowo podłączone gniazdo i zwraca nowy deskryptor pliku odnoszący się do tego
gniazda. Nowo utworzone gniazdo nie jest już w stanie
nasłuchiwania. Oryginalne gniazdo \fIsockfd\fP pozostaje po tym wywołaniu
niezmienione.
.PP
Argument \fIsockfd\fP jest gniazdem, które zostało utworzone wywołaniem
\fBsocket\fP(2), przywiązanym do adresu  lokalnego z pomocą \fBbind\fP(2), i
nasłuchującym połączeń po wywołaniu \fBlisten\fP(2).
.PP
Argument \fIaddr\fP jest wskaźnikiem do struktury \fIsockaddr\fP. Do struktury tej
jest wpisywany adres drugiego gniazda, przekazany przez warstwę
komunikacyjną. Dokładny format zwracanego adresu \fIaddr\fP jest określony
poprzez rodzinę adresową gniazda (zobacz \fBsocket\fP(2) i strony podręcznika
dotyczące odpowiedniego protokołu). Gdy \fIaddr\fP jest równe NULL, to nic nie
jest wypełniane; w takim przypadku \fIaddrlen\fP nie jest używane i również
powinno wynosić NULL.
.PP
Argument \fIaddrlen\fP jest parametrem wartościowo\-wynikowym: powinien
początkowo zawierać rozmiar (w bajtach) struktury, na którą wskazuje
\fIaddr\fP; po zakończeniu będzie zawierał rzeczywistą długość zwracanego
adresu.
.PP
Zwracany adres jest przycinany, jeśli udostępniony bufor jest zbyt mały; w
tym przypadku \fIaddrlen\fP zwróci wartość większą niż była podana w wywołaniu.
.PP
Jeśli nie ma zalegających połączeń w kolejce, a gniazdo nie jest zaznaczone
jako nieblokujące, to \fBaccept\fP() blokuje proces wywołujący aż do uzyskania
połączenia. Gdy gniazdo jest zaznaczone jako nieblokujące i nie ma
zalegających połączeń w kolejce, \fBaccept\fP() zawodzi z błędem \fBEAGAIN\fP lub
\fBEWOULDBLOCK\fP.
.PP
Aby być informowanym o nadchodzących do gniazda połączeniach, można użyć
\fBselect\fP(2), \fBpoll\fP(2) lub \fBepoll\fP(7). Podczas próby nowego połączenia
zostanie dostarczone zdarzenie odczytywalności (readable) i wtedy można
wywołać \fBaccept\fP() aby uzyskać gniazdo tego połączenia. Inaczej, można
ustawić gniazdo tak, by dostarczało \fBSIGIO\fP za każdym razem, gdy się na nim
coś zacznie dziać; szczegóły można znaleźć w \fBsocket\fP(7).
.PP
Jeśli \fIflags\fP wynosi 0, to \fBaccept4\fP() jest taka sama jak
\fBaccept\fP(). Następujące wartości \fIflags\fP można zsumować logicznie, aby
uzyskać odmienne zachowanie:
.TP  16
\fBSOCK_NONBLOCK\fP
Ustawia znacznik statusu pliku \fBO_NONBLOCK\fP na otwartym deskryptorze pliku
(zob. \fBopen\fP(2) do którego odnosi się nowy deskryptor pliku. Użycie tego
znacznika zapobiega dodatkowym wywołaniom do \fBfcntl\fP(2) przy uzyskaniu tego
samego efektu.
.TP 
\fBSOCK_CLOEXEC\fP
Ustawia znacznik zamknięcia\-przy\-wykonaniu (\fBFD_CLOEXEC\fP) na nowym
deskryptorze pliku. Opis znacznika \fBO_CLOEXEC\fP w podręczniku \fBopen\fP(2)
informuje o przypadkach, w których może się to okazać przydatne.
.SH "WARTOŚĆ ZWRACANA"
W przypadku sukcesu, te wywołania systemowe zwracają deskryptor pliku dla
zaakceptowanego gniazda (nieujemną liczbę całkowitą). W razie zaistnienia
błędu, zwracane jest \-1, ustawiane jest \fIerrno\fP wskazując błąd, a
\fIaddrlen\fP nie ulega zmianie.
.SS "Obsługa błędów"
Linuksowe \fBaccept\fP (i \fBaccept4\fP()) przekazuje zalegające już na nowym
gnieździe błędy sieciowe jako kod błędu z \fBaccept\fP(). Zachowanie to różni
się od implementacji gniazd w BSD. Dla sensownego działania, aplikacja
powinna wykrywać po wykonaniu \fBaccept\fP() błędy sieciowe, zdefiniowane dla
danego protokołu i traktować je jak \fBEAGAIN\fP, czyli ponawiać próbę. W
wypadku TCP/IP są to \fBENETDOWN\fP, \fBEPROTO\fP, \fBENOPROTOOPT\fP, \fBEHOSTDOWN\fP,
\fBENONET\fP, \fBEHOSTUNREACH\fP, \fBEOPNOTSUPP\fP i \fBENETUNREACH\fP.
.SH BŁĘDY
.TP 
\fBEAGAIN\fP lub \fBEWOULDBLOCK\fP
.\" Actually EAGAIN on Linux
Gniazdo jest oznaczone jako nieblokujące i nie występują połączenia do
zaakceptowania. POSIX.1\-2001 i POSIX.1\-2008 zezwalają na zwrócenie w takim
przypadku dowolnego z dwóch błędów i nie wymagają, aby miały one taką samą
wartość, dlatego przenośne aplikacje powinny sprawdzić oba przypadki.
.TP 
\fBEBADF\fP
\fIsockfd\fP nie jest deskryptorem otwartego pliku.
.TP 
\fBECONNABORTED\fP
Połączenie zostało przerwane.
.TP 
\fBEFAULT\fP
Argument \fIaddr\fP nie znajduje się w przestrzeni adresowej dostępnej do
zapisu dla użytkownika.
.TP 
\fBEINTR\fP
Wywołanie systemowe zostało przerwane wskutek odebrania sygnału przed
prawidłowym nawiązaniem połączenia; zob. \fBsignal\fP(7).
.TP 
\fBEINVAL\fP
Gniazdo nie nasłuchuje połączeń lub \fIaddrlen\fP jest nieprawidłowe (np. jest
ujemne).
.TP 
\fBEINVAL\fP
(\fBaccept4\fP())  nieprawidłowa wartość w \fIflags\fP.
.TP 
\fBEMFILE\fP
Zostało osiągnięte ograniczenie na liczbę otwartych deskryptorów plików dla
procesu.
.TP 
\fBENFILE\fP
Zostało osiągnięte systemowe ograniczenie na całkowitą liczbę otwartych
plików.
.TP 
\fBENOBUFS\fP, \fBENOMEM\fP
Jest niedostateczna ilość wolnej pamięci. Oznacza to zazwyczaj, że istnieje
ograniczenie dla przydzielania pamięci na bufory gniazd, nie zaś że zabrakło
pamięci w systemie.
.TP 
\fBENOTSOCK\fP
Deskryptor pliku \fIsockfd\fP nie odnosi się do gniazda.
.TP 
\fBEOPNOTSUPP\fP
Przekazane gniazdo nie jest typu \fBSOCK_STREAM\fP.
.TP 
\fBEPERM\fP
Reguły zapory sieciowej zabraniają połączenia.
.TP 
\fBEPROTO\fP
Wystąpił błąd protokołu.
.PP
Dodatkowo, dla nowego gniazda mogą być zwracane błędy sieciowe zdefiniowane
dla danego protokołu. Różne jądra Linux mogą zwracać inne błędy, takie jak
\fBENOSR\fP, \fBESOCKTNOSUPPORT\fP, \fBEPROTONOSUPPORT\fP, \fBETIMEDOUT\fP. Wartość
\fBERESTARTSYS\fP może być obserwowana podczas śledzenia.
.SH WERSJE
Wywołanie systemowe \fBaccept4\fP() jest dostępne począwszy od Linuksa 2.6.28;
obsługa w glibc pojawiła się od wersji glibc 2.10.
.SH STANDARDY
.\" The BSD man page documents five possible error returns
.\" (EBADF, ENOTSOCK, EOPNOTSUPP, EWOULDBLOCK, EFAULT).
.\" POSIX.1-2001 documents errors
.\" EAGAIN, EBADF, ECONNABORTED, EINTR, EINVAL, EMFILE,
.\" ENFILE, ENOBUFS, ENOMEM, ENOTSOCK, EOPNOTSUPP, EPROTO, EWOULDBLOCK.
.\" In addition, SUSv2 documents EFAULT and ENOSR.
\fBaccept\fP(): POSIX.1\-2001, POSIX.1\-2008, SVr4, 4.4BSD (\fBaccept\fP() pojawiła
się pierwotnie w 4.2BSD).
.PP
\fBaccept4\fP() jest niestandardowym rozszerzeniem systemu Linux.
.PP
.\" Some testing seems to show that Tru64 5.1 and HP-UX 11 also
.\" do not inherit file status flags -- MTK Jun 05
W Linuksie, nowe gniazdo zwracane przez \fBaccept\fP() \fInie\fP dziedziczy
znaczników statusu pliku, takich jak \fBO_NONBLOCK\fP i \fBO_ASYNC\fP od
nasłuchującego gniazda. Takie zachowanie różni się od tradycyjnej
implementacji gniazd BSD. Przenośne programy nie powinny polegać na
dziedziczeniu lub niedziedziczeniu znaczników statusu pliku i zawsze
ustawiać wprost wszystkie wymagane znaczniki na gnieździe zwracanym przez
\fBaccept\fP(2).
.SH UWAGI
Nie zawsze po dostarczeniu \fBSIGIO\fP musi istnieć oczekujące połączenie. To
samo dotyczy \fBselect\fP(2),  \fBpoll\fP(2) i \fBepoll\fP(7), zwracających zdarzenie
odczytywalności, ponieważ połączenie mogło zostać usunięte przez
asynchroniczny błąd sieci lub inny wątek, przed wywołaniem
\fBaccept\fP(). Jeśli to się zdarzy, to wywołanie będzie blokować, oczekując
następnego połączenia. Aby upewnić się, że \fBaccept\fP() nigdy nie będzie
blokowało, przekazane gniazdo \fIsockfd\fP powinno mieć ustawiony znacznik
\fBO_NONBLOCK\fP (zobacz \fBsocket\fP(7)).
.PP
.\"
Dla niektórych protokołów wymagających bezpośredniego potwierdzania, takich
jak DECnet, \fBaccept\fP() może być uważane za wywołanie zdejmujące z kolejki
następne żądanie połączenia, nie powodując potwierdzenia. Potwierdzenie
można spowodować przez normalny odczyt, lub zapis na nowym deskryptorze
pliku, a odrzucenie można spowodować, zamykając gniazdo. Obecnie pod
Linuksem taką semantykę ma tylko DECnet.
.SS "Typ socklen_t"
.\" such as Linux libc4 and libc5, SunOS 4, SGI
.\" SunOS 5 has 'size_t *'
W oryginalnej implementacji gniazd BSD (i innych starszych systemów) trzeci
argument \fBaccept\fP() był deklarowany jako \fIint\ *\fP. Szkic POSIX.1g planował
zmienić to na \fIsize_t\ *\fPC; późniejsze standardy POSIX oraz glibc 2.x
posiadają \fIsocklen_t\ * \fP.
.SH PRZYKŁADY
Zobacz \fBbind\fP(2).
.SH "ZOBACZ TAKŻE"
\fBbind\fP(2), \fBconnect\fP(2), \fBlisten\fP(2), \fBselect\fP(2), \fBsocket\fP(2),
\fBsocket\fP(7)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Przemek Borys <pborys@dione.ids.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>
i
Michał Kułach <michal.kulach@gmail.com>
.
.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 .
