accept(2) System Calls Manual accept(2) NAVN accept, accept4 - accepter en forbindelse pa en sokkel BIBLIOTEK C-standardbibliotek (libc, -lc) SYNOPSIS #include int accept(int sockfd, struct sockaddr *_Nullable restrict addr, socklen_t *_Nullable restrict addrlen); #define _GNU_SOURCE /* Se feature_test_macros(7) */ #include int accept4(int sockfd, struct sockaddr *_Nullable restrict addr, socklen_t *_Nullable restrict addrlen, int flags); BESKRIVELSE Systemkaldet accept() bruges med forbindelsesbaserede sokkeltyper (SOCK_STREAM, SOCK_SEQPACKET). Det udtraekker den forste forbindelsesanmodning pa koen for afventende forbindelser for den lyttende sokkel, sockfd, opretter en ny forbundet sokkel og returnerer en ny fildeskriptor, der refererer til den sokkel. Den netop oprettede sokkel er ikke i lyttetilstanden. Den oprindelige sokkel sockfd er upavirket af dette kald. Argumentet sockfd er en sokkel, der er blevet oprettet med socket(2), bundet til en lokal adresse med bind(2), og lytter efter forbindelser efter en listen(2). Argumentet addr er en peger til strukturen sockaddr. Denne struktur er udfyldt med adressen af modpartsoklen, som kendt af kommunikationslaget. Det praecise format for adressen returneret addr bestemmes af soklens adressefamilie (se socket(2) og de respektive protokolmanualsider). Nar addr er NULL, udfyldes intet; i det tilfaelde, bruges addrlen ikke, og skal ogsa vaere NULL. Argumentet addrlen er et vaerdi-resultat argument: kalderen skal igangsaette det for at have storrelsen (i byte) for strukturen pegende mod addr; ved returnering vil det indeholde den faktiske storrelse for modpartsadressen. Den returnerede adresse er forkortet hvis bufferen tilbudt er for lille; i dette tilfaelde vil addrlen returnere en vaerdi storre end den var leveret til kaldet. Hvis ingen ventende forbindelser er til stede pa koen og soklen ikke er markeret som ikkeblokerende, sa blokerer accept() kalderen indti len forbindelse er til stede. Hvis soklen er markeret som ikkeblokernede og ingen igangvaerende forbindleser er til stede pa koen, sa fejler accept() med fejlen EAGAIN eller EWOULDBLOCK. For at blive pamindet om indgaende forbindelser pa en sokkel, sa kan du bruge select(2), poll(2) eller epoll(7). En laesbar haendelse vil blive leveret, nar en ny forbindelse forsoges og du kan sa kalde accept() for at fa en sokkel for den forbindelse. Alternativt kan du angive soklen til at levere SIGIO nar aktivitet sker pa en sokkel; se socket(7) for detaljer. Hvis flag er nul, sa er accept4() det samme som accept(). De folgende vaerdier vaere bitwise ORed i flag for at hente forskellig opforelse: SOCK_NONBLOCK Angiv filstatusflaget O_NONBLOCK pa den abne filbeskrivelse (se open(2)) refereret til af den nye fildeskriptor. Brug af dette flag gemmer ekstra kald til fcntl(2) for at opna det samme resultat. SOCK_CLOEXEC Angiv close-on-exec-flaget (FD_CLOEXEC) pa den nye fildeskriptor. Se beskrivelsen for flaget O_CLOEXEC i open(2) for arsager til hvorfor dette kan vaere nyttigt. RETURVAERDI Ved succes returnerer disse systemkald en fildeskriptor for den accepterede sokkel (et ikkenegativ heltal). Ved fejl returneres -1, errno angives for at indikere fejlen og addrlen forbliver uaendret. Fejlhandtering Linux accept() (og accept4()) sender allerede igangvaerende netvaerksfejl pa den nye sokkel som en fejlkode fra accept(). Denne opforelse er forskellig fra andre BSD-sokkelimplementeringer. For trovaerdig operation bor programmet registrere netvaerksfejl defineret for protokollen efter accept() og behandle dem som EAGAIN ved at prove igen. I tilfaelde af TCP/IP, er disse ENETDOWN, EPROTO, ENOPROTOOPT, EHOSTDOWN, ENONET, EHOSTUNREACH, EOPNOTSUPP og ENETUNREACH. FEJL EAGAIN eller EWOULDBLOCK Soklen er markeret ikkeblokerende og ingen forbindelser er til stede for accept. POSIX.1-2001 og POSIX.1-2008 tillader ikke at fejl returneres i dette tilfaelde og kraever ikke at disse konstanter har den samme vaerdi, sa et flytbart program skal tjekke for begge muligheder. EBADF sockfd er ikke en aben fildeskriptor. ECONNABORTED En forbindelse er blevet afbrudt. EFAULT Argumentet addr er ikke en skrivbar del af brugeradresserummet. EINTR Systemkaldet blev afbrudt af et signal, der blev fanget for en gyldig forbindelse ankom; se signal(7). EINVAL Sokket lytter ikke efter forbindelser, eller addrlen er ugyldig (f.eks. er negativ). EINVAL (accept4()) ugyldig vaerdi i flag. EMFILE Begraensningen per proces for antallet af abne fildeskriptorer er blevet naet. ENFILE Systemets begraensning pa det samlede antal abne filer er naet. ENOBUFS ENOMEM Ikke nok ledig hukommelse. Dette betyder ofte at hukommelsesallokeringen er begraenset af sokkelbufferbegraensningerne, ikke af systemhukommelsen. ENOTSOCK Fildeskriptoren sockfd refererer ikke til en sokkel. EOPNOTSUPP Den refererede sokkel er ikke af typen SOCK_STREAM. EPERM Brandmursregler forbyder forbindelse. EPROTO Protokolfejl. Derudover kan netvaerksfejl for den nye sokkel og som defineret for protokollen blive returneret. Diverse Linuxkerner kan returnere andre fejl sasom ENOSR, ESOCKTNOSUPPORT, EPROTONOSUPPORT, ETIMEDOUT. Vaerdien ERESTARTSYS kan ses under en registrering. VERSIONER Pa Linux arver den nye sokkel returneret af accept() ikke filstatusflag sasom O_NONBLOCK og O_ASYNC fra den lyttende sokkel. Denne opforelse er forskellig fra den kanoniske BSD-sokkelimplementering. Flytbare programmer bor altid afhaenge af arv eller ikke-arvelighed for filstatusflag og altid eksplicit angive alle kraevede flag pa soklen returneret fra accept(). STANDARDER POSIX.1-2024. HISTORIK accept() POSIX.1-2001, SVr4, 4.4BSD (accept() var forste gang i 4.2BSD). accept4() POSIX.1-2024. Linux 2.6.28, glibc 2.10. NOTER Der er ikke altid en forbindelse ventende efter en SIGIO er leveret eller select(2), poll(2) eller epoll(7) returnerer en laesbarhedshaendelse da forbindelsen kan vaere fjernet af en asynkron netvaerksfejl eller en anden trad for accept() kaldes. Hvis dette sker, sa vil kaldet blokere ventende pa at den naeste forbindelse ankommer. For at sikre at accept() aldrig blokerer, skal den sendte sokkel sockfd have flaget O_NONBLOCK angivet (se socket(7)). For bestemte protokoller, der kraever en eksplicit bekraeftelse, sasom DECnet, kan accept() ses som blot afkorende den naeste forbindelsesanmodning og ikke implementere bekraeftelse. Bekraeftelse kan vaere underforstaet som en normal laes eller skriv pa den nye fildeskriptor, og afvigelse kan vaere underforstaet ved at lukke den nye sokkel. I ojeblikket har kun DECnet denne semantik pa Linux. Socklen_t-typen I den originale BSD-sokkelimplementering (og pa andre aeldre systemer) blev det tredje argument for accept() erklaeret som en int *. En POSIX.1g-kladdestandard onskede at aendre det til en size_t *; senere POSIX-standard og glibc 2.x har socklen_t * . EKSEMPLER Se bind(2). SE OGSA bind(2), connect(2), listen(2), select(2), socket(2), socket(7) OVERSAETTELSE Oversaettere af denne manual til dansk Joe Dalton Denne oversaettelse er gratis dokumentation; laes GNU General Public License version 3 eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR. Hvis du stoder pa fejl i oversaettelsen af denne vejledning, skal du sende en besked til . Linux man-pages 6.17 29. oktober 2025 accept(2)