C standard library :: socket
accept - accepter en forbindelse på en socket
Denne funktion skal udtrække den første forbindelse på en kø af ventende forbindelser og kreere en ny socket med den samme socket-type-protokol og adresse-familie som den specificerede socket, og allokere en ny file descriptor for den socket.
Funktionen accept() tager følgende parametre:
- fd
- Angiver en socket som var kreeret med socket() og bundet til en adresse med bind() og udført et succesfuldt kald til listen().
- addr
- Er enten til nul-peger eller en peger til en sockaddr struktur hvor adressen på forbindelsen skal returneres.
- addr_len
- Peger til en socklen_t struktur som ved input specificerer en længde på den indgivne sockaddr struktur og ved output en længde på den gemte adresse.
Hvis den aktuelle længde på adressen er større end længden på den indgivne sockaddr struktur vil den gemte adresse blive afkortet.
Hvis protokollen tillader forbindelser på en ubunden klient og peer ikke er bundet, så vil værdien gemt i addr være ukendt.
Hvis lytte-køen er tom på forbindelses-anmodninger og O_NONBLOCK ikke er sat på file descriptor for socket, skal accept() blokerer indtil en forbindelse er tilstede. Hvis listen() køen er tom på forbindelses-anmodninger og O_NONBLOCK er sat på file descriptor for socket, skal accept() fejle og sætte errno til [EAGAIN] eller [EWOULDBLOCK].
Den af accept() returnerede file descriptor kan ikke acceptere flere forbindelser medens den originale fd socket forbliver åben og kan acceptere flere forbindelser.
Returværdi
Ved succesfuld udførelse returneres et positivt nummer som indikerer en file accepteret file descriptor socket. Ellers -1 og errno sat til at indikere årsag.
Fejl
Funktionen accept() skal fejle hvis:
- [EAGAIN] eller [EWOULDBLOCK]
- O_NONBLOCK er sat for socket og ingen forbindelser er tilstede til at blive accepteret.
- [EBADF]
- Parameteren fd er ikke en valid file descriptor.
- [ECONNABORTED]
- En forbindelse er afbrudt.
- [EINTR]
- Funktionen accept() blev afbrudt af et signal som blev indfanget før end en valid forbindelse blev optaget.
- [EINVAL]
- Den socket accepterer ikke forbindelser.
- [EMFILE]
- OPEN_MAX åbne file descriptorer er nået for den kaldende process.
- [ENFILE]
- Maksimum antal af file descriptor for systemet er allerede åben.
- [ENOTSOCK]
- Parameteren fd refererer ikke til en socket .
- [EOPNOTSUPP]
- Sockettypen i den specificerede socket supporterer ikke forbindelser.
Funktionen accept() kan fejle hvis:
- [ENOBUFS]
- Ingen plads til buffer.
- [ENOMEM]
- Der var ikke tilstrækkeligt med memory til fuldførelsen af operationen.
- [EPROTO]
- [XSR] En protokolfejl opstod, kan skyldes at protokolstakken for STREAMS ikke er blevet initialiseret.