.\" -*- 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 .\" Modified 1996-10-21 by Eric S. Raymond .\" Modified 1998-2000 by Andi Kleen to match Linux 2.2 reality .\" Modified 2002-04-23 by Roger Luethi .\" Modified 2004-06-17 by Michael Kerrisk .\" 2008-12-04, mtk, Add documentation of accept4() .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH accept 2 "5 kwietnia 2023 r." "Linux man\-pages 6.05.01" .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 \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 \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 .\" 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 STANDARDY .TP \fBaccept\fP() POSIX.1\-2008. .TP \fBaccept4\fP() Linux. .SH HISTORIA .TP \fBaccept\fP() .\" 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. POSIX.1\-2001, SVr4, 4.4BSD (\fBaccept\fP() pojawiło się pierwotnie w 4.2BSD). .TP \fBaccept4\fP() Linux 2.6.28, glibc 2.10. .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 , 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 .