Scroll to navigation

ACCEPT(2) п═я┐п╨п╬п╡п╬п╢я│я┌п╡п╬ п©я─п╬пЁя─п╟п╪п╪п╦я│я┌п╟ Linux ACCEPT(2)

п≤п°п╞

accept - п©я─п╦п╫я▐я┌я▄ я│п╬п╣п╢п╦п╫п╣п╫п╦п╣ п╫п╟ я│п╬п╨п╣я┌п╣

п·п▒п≈п·п═

#include <sys/types.h>          /* п║п╪. п≈п░п°п∙п╖п░п²п≤п╞ */
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
#define _GNU_SOURCE
#include <sys/socket.h>
int accept4(int sockfd, struct sockaddr *addr,
            socklen_t *addrlen, int flags);

п·п÷п≤п║п░п²п≤п∙

п║п╦я│я┌п╣п╪п╫я▀п╧ п╡я▀п╥п╬п╡ accept() п╦я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ я│ я│п╬п╨п╣я┌п╟п╪п╦, п╬я─п╦п╣п╫я┌п╦я─п╬п╡п╟п╫п╫я▀п╪п╦ п╫п╟ я┐я│я┌п╟п╫п╬п╡п╩п╣п╫п╦п╣ я│п╬п╣п╢п╦п╫п╣п╫п╦я▐ (SOCK_STREAM, SOCK_SEQPACKET). п·п╫п╟ п╦п╥п╡п╩п╣п╨п╟п╣я┌ п©п╣я─п╡я▀п╧ п╥п╟п©я─п╬я│ п╫п╟ я│п╬п╣п╢п╦п╫п╣п╫п╦п╣ п╦п╥ п╬я┤п╣я─п╣п╢п╦ п╬п╤п╦п╢п╟я▌я┴п╦я┘ я│п╬п╣п╢п╦п╫п╣п╫п╦п╧ п©я─п╬я│п╩я┐я┬п╦п╡п╟я▌я┴п╣пЁп╬ я│п╬п╨п╣я┌п╟, sockfd, я│п╬п╥п╢п╟я▒я┌ п╫п╬п╡я▀п╧ п©п╬п╢п╨п╩я▌я┤п╣п╫п╫я▀п╧ я│п╬п╨п╣я┌ п╦ п╦ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╫п╬п╡я▀п╧ я└п╟п╧п╩п╬п╡я▀п╧ п╢п╣я│п╨я─п╦п©я┌п╬я─, я┐п╨п╟п╥я▀п╡п╟я▌я┴п╦п╧ п╫п╟ я│п╬п╨п╣я┌. п²п╬п╡я▀п╧ я│п╬п╨п╣я┌ п╠п╬п╩п╣п╣ п╫п╣ п╫п╟я┘п╬п╢п╦я┌я│я▐ п╡ я│п╩я┐я┬п╟я▌я┴п╣п╪ я│п╬я│я┌п╬я▐п╫п╦п╦. п≤я│я┘п╬п╢п╫я▀п╧ я│п╬п╨п╣я┌ sockfd п╫п╣ п╦п╥п╪п╣п╫я▐п╣я┌я│я▐ п©я─п╦ я█я┌п╬п╪ п╡я▀п╥п╬п╡п╣.

п░я─пЁя┐п╪п╣п╫я┌ sockfd — я█я┌п╬ я│п╬п╨п╣я┌, п╨п╬я┌п╬я─я▀п╧ п╠я▀п╩ я│п╬п╥п╢п╟п╫ я│ п©п╬п╪п╬я┴я▄я▌ socket(2), п©я─п╦п╡я▐п╥п╟п╫п╫я▀п╧ п╨ п╩п╬п╨п╟п╩я▄п╫п╬п╪я┐ п╟п╢я─п╣я│я┐ я│ п©п╬п╪п╬я┴я▄я▌ bind(2), п╦ п©я─п╬я│п╩я┐я┬п╦п╡п╟я▌я┴п╦п╧ я│п╬п╣п╢п╦п╫п╣п╫п╦я▐ п©п╬я│п╩п╣ listen(2).

п░я─пЁя┐п╪п╣п╫я┌ addr — я█я┌п╬ я┐п╨п╟п╥п╟я┌п╣п╩я▄ п╫п╟ я│я┌я─я┐п╨я┌я┐я─я┐ sockaddr. п▓ я█я┌я┐ я│я┌я─я┐п╨я┌я┐я─я┐ п©п╬п╪п╣я┴п╟п╣я┌я│я▐ п╟п╢я─п╣я│ п╬я┌п╡п╣я┌п╫п╬п╧ я│я┌п╬я─п╬п╫я▀ п╡ я┌п╬п╪ п╡п╦п╢п╣, п╡ п╨п╟п╨п╬п╪ п╬п╫ п╦п╥п╡п╣я│я┌п╣п╫ п╫п╟ п╨п╬п╪п╪я┐п╫п╦п╨п╟я├п╦п╬п╫п╫п╬п╪ я┐я─п╬п╡п╫п╣. п╒п╬я┤п╫я▀п╧ я└п╬я─п╪п╟я┌ п╟п╢я─п╣я│п╟, п╡п╬п╥п╡я─п╟я┴п╟п╣п╪п╬пЁп╬ п╡ п©п╟я─п╟п╪п╣я┌я─п╣ addr, п╬п©я─п╣п╢п╣п╩я▐п╣я┌я│я▐ я│п╣п╪п╣п╧я│я┌п╡п╬п╪ п╟п╢я─п╣я│п╬п╡ я│п╬п╨п╣я┌п╟ (я│п╪. socket(2) п╦ я│п©я─п╟п╡п╬я┤п╫я┐я▌ я│я┌я─п╟п╫п╦я├я┐ п©п╬ я│п╬п╬я┌п╡п╣я┌я│я┌п╡я┐я▌я┴п╣п╪я┐ п©я─п╬я┌п╬п╨п╬п╩я┐). п∙я│п╩п╦ addr я─п╟п╡п╣п╫ NULL, я┌п╬ п╫п╦я┤п╣пЁп╬ п╫п╣ п©п╬п╪п╣я┴п╟п╣я┌я│я▐; п╡ я█я┌п╬п╪ я│п╩я┐я┤п╟п╣ addrlen п╫п╣ п╦я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╦ я┌п╟п╨п╤п╣ п╢п╬п╩п╤п╣п╫ п╠я▀я┌я▄ NULL.

п╖п╣я─п╣п╥ п╟я─пЁя┐п╪п╣п╫я┌ addrlen п╬я│я┐я┴п╣я│я┌п╡п╩я▐п╣я┌я│я▐ п╡п╬п╥п╡я─п╟я┌ я─п╣п╥я┐п╩я▄я┌п╟я┌п╟: п╡я▀п╥я▀п╡п╟я▌я┴п╟я▐ я│я┌п╬я─п╬п╫п╟ п╢п╬п╩п╤п╫п╟ я┐п╨п╟п╥п╟я┌я▄ п╡ п╫я▒п╪ я─п╟п╥п╪п╣я─ (п╡ п╠п╟п╧я┌п╟я┘) я│я┌я─я┐п╨я┌я┐я─я▀, п╫п╟ п╨п╬я┌п╬я─я┐я▌ я┐п╨п╟п╥я▀п╡п╟п╣я┌ addr; п©я─п╦ п╡п╬п╥п╡я─п╟я┌п╣ п╬п╫ п╠я┐п╢п╣я┌ я│п╬п╢п╣я─п╤п╟я┌я▄ я─п╣п╟п╩я▄п╫я▀п╧ я─п╟п╥п╪п╣я─ п╟п╢я─п╣я│п╟ п╬я┌п╡п╣я┌п╫п╬п╧ я│я┌п╬я─п╬п╫я▀.

п▓п╬п╥п╡я─п╟я┴п╟п╣п╪я▀п╧ п╟п╢я─п╣я│ я┐я─п╣п╤п╣я┌я│я▐, п╣я│п╩п╦ п©я─п╣п╢п╬я│я┌п╟п╡п╩п╣п╫п╫я▀п╧ п╠я┐я└п╣я─ п╬п╨п╟п╤п╣я┌я│я▐ я│п╩п╦я┬п╨п╬п╪ п╪п╟п╩п╣п╫я▄п╨п╦п╪; п╡ я█я┌п╬п╪ я│п╩я┐я┤п╟п╣ п╡ addrlen п╠я┐п╢п╣я┌ п╡п╬п╥п╡я─п╟я┴п╣п╫п╬ п╥п╫п╟я┤п╣п╫п╦п╣ п╠п╬п╩я▄я┬п╣п╣ я┤п╣п╪ п╠я▀п╩п╬ п╡ п╡я▀п╥п╬п╡п╣.

п∙я│п╩п╦ п╡ п╬я┤п╣я─п╣п╢п╦ п╫п╣я┌ п╬п╤п╦п╢п╟я▌я┴п╦я┘ п╥п╟п©я─п╬я│п╬п╡ п╫п╟ я│п╬п╣п╢п╦п╫п╣п╫п╦п╣, п╦ п╫п╟ я│п╬п╨п╣я┌ п╫п╣ п©п╬п╪п╣я┤п╣п╫ п╨п╟п╨ п╫п╣п╠п╩п╬п╨п╦я─я┐я▌я┴п╦п╧, я┌п╬ accept() п╥п╟п╠п╩п╬п╨п╦я─я┐п╣я┌ п╡я▀п╥п╡п╟п╡я┬я┐я▌ п©я─п╬пЁя─п╟п╪п╪я┐ п╢п╬ п©п╬я▐п╡п╩п╣п╫п╦я▐ я│п╬п╣п╢п╦п╫п╣п╫п╦я▐. п∙я│п╩п╦ я│п╬п╨п╣я┌ п©п╬п╪п╣я┤п╣п╫ п╨п╟п╨ п╫п╣п╠п╩п╬п╨п╦я─я┐я▌я┴п╦п╧, п╟ п╡ п╬я┤п╣я─п╣п╢п╦ п╫п╣я┌ п╥п╟п©я─п╬я│п╬п╡ п╫п╟ я│п╬п╣п╢п╦п╫п╣п╫п╦п╣, я┌п╬ accept() п╥п╟п╡п╣я─я┬п╦я┌я│я▐ я│ п╬я┬п╦п╠п╨п╬п╧ EAGAIN п╦п╩п╦ EWOULDBLOCK.

п■п╩я▐ я┌п╬пЁп╬, я┤я┌п╬п╠я▀ п©п╬п╩я┐я┤п╟я┌я▄ я┐п╡п╣п╢п╬п╪п╩п╣п╫п╦я▐ п╬ п╡я┘п╬п╢я▐я┴п╦я┘ я│п╬п╣п╢п╦п╫п╣п╫п╦я▐я┘ п╫п╟ я│п╬п╨п╣я┌п╣, п╪п╬п╤п╫п╬ п╦я│п©п╬п╩я▄п╥п╬п╡п╟я┌я▄ select(2) п╦п╩п╦ poll(2). п▓ я█я┌п╬п╪ я│п╩я┐я┤п╟п╣, п╨п╬пЁп╢п╟ п©я─п╦п╢я▒я┌ п╥п╟п©я─п╬я│ п╫п╟ п╫п╬п╡п╬п╣ я│п╬п╣п╢п╦п╫п╣п╫п╦п╣, п╠я┐п╢п╣я┌ п╢п╬я│я┌п╟п╡п╩п╣п╫п╬ я│п╬п╠я▀я┌п╦п╣ "п╪п╬п╤п╫п╬ я┤п╦я┌п╟я┌я▄", п╦ п©п╬я│п╩п╣ я█я┌п╬пЁп╬ п╡я▀ п╪п╬п╤п╣я┌п╣ п╡я▀п╥п╡п╟я┌я▄ accept() я┤я┌п╬п╠я▀ п©п╬п╩я┐я┤п╦я┌я▄ я│п╬п╨п╣я┌ п╢п╩я▐ я█я┌п╬пЁп╬ я│п╬п╣п╢п╦п╫п╣п╫п╦я▐. п°п╬п╤п╫п╬ я┌п╟п╨п╤п╣ п╫п╟я│я┌я─п╬п╦я┌я▄ я│п╬п╨п╣я┌ я┌п╟п╨, я┤я┌п╬п╠я▀ п╬п╫ п©п╬я│я▀п╩п╟п╩ я│п╦пЁп╫п╟п╩ SIGIO, п╨п╬пЁп╢п╟ п╫п╟ п╫я▒п╪ п©я─п╬п╦я│я┘п╬п╢п╦я┌ п╨п╟п╨п╟я▐-п╩п╦п╠п╬ п╟п╨я┌п╦п╡п╫п╬я│я┌я▄; я│п╪. socket(7).

п■п╩я▐ п╬п©я─п╣п╢п╣п╩я▒п╫п╫я▀я┘ п©я─п╬я┌п╬п╨п╬п╩п╬п╡, п╨п╬я┌п╬я─я▀п╣ я┌я─п╣п╠я┐я▌я┌ я▐п╡п╫п╬пЁп╬ п©п╬п╢я┌п╡п╣я─п╤п╢п╣п╫п╦я▐, п╫п╟п©я─п╦п╪п╣я─, DECNet, accept() п╪п╬п╤п╫п╬ я─п╟я│я│п╪п╟я┌я─п╦п╡п╟я┌я▄ п©я─п╬я│я┌п╬ п╨п╟п╨ п╦п╥п╡п╩п╣я┤п╣п╫п╦п╣ п╦п╥ п╬я┤п╣я─п╣п╢п╦ я│п╩п╣п╢я┐я▌я┴п╣пЁп╬ п╥п╟п©я─п╬я│п╟ п╫п╟ я│п╬п╣п╢п╦п╫п╣п╫п╦п╣, п╫п╣ п©п╬п╢я─п╟п╥я┐п╪п╣п╡п╟я▌я┴п╣п╣ п©п╬п╢я┌п╡п╣я─п╤п╢п╣п╫п╦п╣. п÷п╬п╢я┌п╡п╣я─п╤п╢п╣п╫п╦п╣, п╡ я│п╡п╬я▌ п╬я┤п╣я─п╣п╢я▄, п©я─п╬п╦п╥п╬п╧п╢п╣я┌ п©я─п╦ я│п╩п╣п╢я┐я▌я┴п╣п╪ я┤я┌п╣п╫п╦п╦ п╦п╩п╦ п╥п╟п©п╦я│п╦ п╡ п╫п╬п╡п╬п╪ я└п╟п╧п╩п╬п╡п╬п╪ п╢п╣я│п╨я─п╦п©я┌п╬я─п╣, п╟ п╬я┌п╨п╟п╥ п╬я┌ я│п╬п╣п╢п╦п╫п╣п╫п╦я▐ п╪п╬п╤п╣я┌п©я─п╬п╦п╥п╬п╧я┌п╦ п©я─п╦ п╥п╟п╨я─я▀я┌п╦п╦ п╫п╬п╡п╬пЁп╬ я│п╬п╨п╣я┌п╟. п▓ п╫п╟я│я┌п╬я▐я┴п╣п╣ п╡я─п╣п╪я▐, п©п╬п╢ Linux я┌п╟п╨я┐я▌я│п╣п╪п╟п╫я┌п╦п╨я┐ п╦п╪п╣п╣я┌ я┌п╬п╩я▄п╨п╬ DECNet.

п∙я│п╩п╦ flags я─п╟п╡п╫п╬ 0, я┌п╬ accept4() я┌п╬п╤п╣ я┤я┌п╬ п╦ accept(). п║п╩п╣п╢я┐я▌я┴п╦п╣ п╥п╫п╟я┤п╣п╫п╦я▐ п╪п╬пЁя┐я┌ п╠я▀я┌я▄ п©п╬п╠п╦я┌п╬п╡п╬ я│п╩п╬п╤п╣п╫я▀ п╡ flags п╢п╩я▐ п©п╬п╩я┐я┤п╣п╫п╦я▐ я─п╟п╥п╩п╦я┤п╫п╬пЁп╬ п©п╬п╡п╣п╢п╣п╫п╦я▐:

пёя│я┌п╟п╫п╟п╡п╩п╦п╡п╟п╣я┌ я└п╩п╟пЁ я│п╬я│я┌п╬я▐п╫п╦я▐ я└п╟п╧п╩п╟ O_NONBLOCK п╢п╩я▐ п╫п╬п╡п╬пЁп╬ п╬я┌п╨я─я▀я┌п╬пЁп╬ я└п╟п╧п╩п╬п╡п╬пЁп╬ п╢п╣я│п╨я─п╦п©я┌п╬я─п╟. п≤я│п©п╬п╩я▄п╥п╬п╡п╟п╫п╦п╣ п╢п╟п╫п╫п╬пЁп╬ я└п╩п╟пЁп╟ п╥п╟п╪п╣п╫я▐п╣я┌ п╢п╬п©п╬п╩п╫п╦я┌п╣п╩я▄п╫я▀п╣ п╡я▀п╥п╬п╡я▀ fcntl(2) п╢п╩я▐ п╢п╬я│я┌п╦п╤п╣п╫п╦я▐ я┌п╬пЁп╬ п╤п╣ я─п╣п╥я┐п╩я▄я┌п╟я┌п╟.
пёя│я┌п╟п╫п╟п╡п╩п╦п╡п╟п╣я┌ я└п╩п╟пЁ close-on-exec (FD_CLOEXEC) п╢п╩я▐ п╫п╬п╡п╬пЁп╬ п╬я┌п╨я─я▀я┌п╬пЁп╬ я└п╟п╧п╩п╬п╡п╬пЁп╬ п╢п╣я│п╨я─п╦п©я┌п╬я─п╟. п║п╪п╬я┌я─п╦я┌п╣ п╬п©п╦я│п╟п╫п╦п╣ я└п╩п╟пЁп╟ O_CLOEXEC п╡ open(2) п╢п╩я▐ я┌п╬пЁп╬ я┤я┌п╬п╠я▀ я┐п╥п╫п╟я┌я▄ п╨п╟п╨ я█я┌п╬ п╪п╬п╤п╣я┌ п©я─п╦пЁп╬п╢п╦я┌я▄я│я▐.

п▓п·п≈п▓п═п░п╘п░п∙п°п·п∙ п≈п²п░п╖п∙п²п≤п∙

п÷я─п╦ я┐я│п©п╣я┬п╫п╬п╪ п╡я▀п©п╬п╩п╫п╣п╫п╦п╦ п╢п╟п╫п╫я▀п╣ я│п╦я│я┌п╣п╪п╫я▀п╣ п╡я▀п╥п╬п╡я▀ п╡п╬п╥п╡я─п╟я┴п╟я▌я┌ п╫п╣п╬я┌я─п╦я├п╟я┌п╣п╩я▄п╫п╬п╣ я├п╣п╩п╬п╣, я▐п╡п╩я▐я▌я┴п╣п╣я│я▐ п╢п╣я│п╨я─п╦п©я┌п╬я─п╬п╪ п©я─п╦п╫я▐я┌п╬пЁп╬ я│п╬п╨п╣я┌п╟. п▓ я│п╩я┐я┤п╟п╣ п╬я┬п╦п╠п╨п╦ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌я│я▐ -1, п╟ errno я┐я│я┌п╟п╫п╟п╡п╩п╦п╡п╟п╣я┌я│я▐ п╡ я│п╬п╬я┌п╡п╣я┌я│я┌п╡я┐я▌я┴п╣п╣ п╥п╫п╟я┤п╣п╫п╦п╣.

п·п╠я─п╟п╠п╬я┌п╨п╟ п╬я┬п╦п╠п╬п╨

п▓ я─п╣п╟п╩п╦п╥п╟я├п╦п╦ Linux accept() (п╦ accept4()) п©п╣я─п╣п╢п╟я▒я┌ я┐п╤п╣ п╬п╤п╦п╢п╟я▌я┴п╦п╣ я│п╣я┌п╣п╡я▀п╣ п╬я┬п╦п╠п╨п╦ п╫п╟ п╫п╬п╡я▀п╧ я│п╬п╨п╣я┌, п╨п╟п╨ п╨п╬п╢ п╬я┬п╦п╠п╨п╦ п╦п╥ п╡я▀п╥п╬п╡п╟ accept(). п╜я┌п╬ п©п╬п╡п╣п╢п╣п╫п╦п╣ п╬я┌п╩п╦я┤п╟п╣я┌я│я▐ п╬я┌ п╢я─я┐пЁп╦я┘ я─п╣п╟п╩п╦п╥п╟я├п╦п╧ BSD-я│п╬п╨п╣я┌п╬п╡. п■п╩я▐ п╫п╟п╢я▒п╤п╫п╬п╧ я─п╟п╠п╬я┌я▀ п©я─п╦п╩п╬п╤п╣п╫п╦я▐ п╢п╬п╩п╤п╫я▀ п╬я┌я│п╩п╣п╤п╦п╡п╟я┌я▄ я│п╣я┌п╣п╡я▀п╣ п╬я┬п╦п╠п╨п╦, п╨п╬я┌п╬я─я▀п╣ п╪п╬пЁя┐я┌ п©п╬я▐п╡п╦я┌я▄я│я▐ п©я─п╦ я─п╟п╠п╬я┌п╣ я│ п©я─п╬я┌п╬п╨п╬п╩п╬п╪ accept() п╦ п╬п╠я─п╟п╠п╟я┌я▀п╡п╟я┌я▄ п╦я┘ п╨п╟п╨ EAGAIN п©п╬п╡я┌п╬я─п╫п╬ п╡я▀п©п╬п╩п╫я▐я▐ п╡я▀п╥п╬п╡. п▓ я│п╩я┐я┤п╟п╣ TCP/IP я┌п╟п╨п╦п╪п╦ п╬я┬п╦п╠п╨п╟п╪п╦ я▐п╡п╩я▐я▌я┌я│я▐ ENETDOWN, EPROTO, ENOPROTOOPT, EHOSTDOWN, ENONET, EHOSTUNREACH, EOPNOTSUPP п╦ ENETUNREACH.

п·п╗п≤п▒п п≤

п║п╬п╨п╣я┌ п©п╬п╪п╣я┤п╣п╫ п╨п╟п╨ п╫п╣п╠п╩п╬п╨п╦я─я┐я▌я┴п╦п╧ п╦ п╫п╣я┌ п╫п╦ п╬п╢п╫п╬пЁп╬ я│п╬п╣п╢п╦п╫п╣п╫п╦я▐, п╨п╬я┌п╬я─п╬п╣ п╪п╬п╤п╫п╬ п╠я▀п╩п╬ п╠я▀ п©я─п╦п╫я▐я┌я▄. POSIX.1-2001 п╢п╬п©я┐я│п╨п╟п╣я┌ п╡ я█я┌п╦я┘ я│п╩я┐я┤п╟п╣ п╡п╬п╥п╡я─п╟я┌ п╬я┬п╦п╠п╨п╦ п╦ п╫п╣ я┌я─п╣п╠я┐п╣я┌, я┤я┌п╬п╠я▀ я█я┌п╦ п╨п╬п╫я│я┌п╟п╫я┌я▀ п╦п╪п╣п╩п╦ п╬п╢п╦п╫п╟п╨п╬п╡п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣, п©п╬я█я┌п╬п╪я┐ п©п╣я─п╣п╫п╬я│п╦п╪п╬п╣ п©я─п╦п╩п╬п╤п╣п╫п╦п╣ п╢п╬п╩п╤п╫п╬ п©я─п╬п╡п╣я─я▐я┌я▄ п╬п╠п╣ п╡п╬п╥п╪п╬п╤п╫п╬я│я┌п╦.
п²п╣п©я─п╟п╡п╦п╩я▄п╫я▀п╧ п╢п╣я│п╨я─п╦п©я┌п╬я─.
п║п╬п╣п╢п╦п╫п╣п╫п╦п╣ п╠я▀п╩п╬ п©я─п╣я─п╡п╟п╫п╬.
п░я─пЁя┐п╪п╣п╫я┌ addr п╫п╣ п╫п╟я┘п╬п╢п╦я┌я│я▐ п╡ п©п╬п╩я▄п╥п╬п╡п╟я┌п╣п╩я▄я│п╨п╬п╪ п©я─п╬я│я┌я─п╟п╫я│я┌п╡п╣ п╟п╢я─п╣я│п╬п╡ я│ п╡п╬п╥п╪п╬п╤п╫п╬я│я┌я▄я▌ п╥п╟п©п╦я│п╦.
п║п╦я│я┌п╣п╪п╫я▀п╧ п╡я▀п╥п╬п╡ п©я─п╣я─п╡п╟п╩ я│п╦пЁп╫п╟п╩п╬п╪, п╨п╬я┌п╬я─я▀п╧ п©п╬я│я┌я┐п©п╦п╩ п╢п╬ п╪п╬п╪п╣п╫я┌п╟ п©я─п╦я┘п╬п╢п╟ п╢п╬п©я┐я│я┌п╦п╪п╬пЁп╬ я│п╬п╣п╢п╦п╫п╣п╫п╦я▐; я│п╪. signal(7).
п║п╬п╨п╣я┌ п╫п╣ я│п╩я┐я┬п╟п╣я┌ я│п╬п╣п╢п╦п╫п╣п╫п╦я▐ п╦п╩п╦ п╫п╣п╢п╬п©я┐я│я┌п╦п╪п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣ addrlen (п╫п╟п©я─п╦п╪п╣я─, п╬я┌я─п╦я├п╟я┌п╣п╩я▄п╫п╬п╣).
(accept4()) п╫п╣п╢п╬п©я┐я│я┌п╦п╪п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣ п╡ flags.
п▒я▀п╩п╬ п╢п╬я│я┌п╦пЁп╫я┐я┌п╬ п╬пЁя─п╟п╫п╦я┤п╣п╫п╦п╣ п©п╬ п╬я┌п╨я─я▀я┌я▀п╪ я└п╟п╧п╩п╬п╡я▀п╪ п╢п╣я│п╨я─п╦п©я┌п╬я─п╬п╪ п╫п╟ п©я─п╬я├п╣я│я│.
п▒я▀п╩ п╢п╬я│я┌п╦пЁп╫я┐я┌ я│п╦я│я┌п╣п╪п╫я▀п╧ п╪п╟п╨я│п╦п╪я┐п╪ п╫п╟ п╬я┌п╨я─я▀я┌я▀п╣ я└п╟п╧п╩я▀.
п²п╣ я┘п╡п╟я┌п╟п╣я┌ я│п╡п╬п╠п╬п╢п╫п╬п╧ п©п╟п╪я▐я┌п╦. п╜я┌п╬ п╥п╟я┤п╟я│я┌я┐я▌ п╬п╥п╫п╟я┤п╟п╣я┌, я┤я┌п╬ п╡я▀п╢п╣п╩п╣п╫п╦п╣ п©п╟п╪я▐я┌п╦ п╬пЁя─п╟п╫п╦я┤п╣п╫п╬ я─п╟п╥п╪п╣я─п╟п╪п╦ п╠я┐я└п╣я─п╟ я│п╬п╨п╣я┌п╬п╡, п╟ п╫п╣ я│п╦я│я┌п╣п╪п╫п╬п╧ п©п╟п╪я▐я┌я▄я▌.
п■п╣я│п╨я─п╦п©я┌п╬я─ я│я│я▀п╩п╟п╣я┌я│я▐ п╫п╟ я└п╟п╧п╩, п╟ п╫п╣ п╫п╟ я│п╬п╨п╣я┌.
п╒п╦п© я│п╬п╨п╣я┌п╟, п╫п╟ п╨п╬я┌п╬я─я▀п╧ я│я│я▀п╩п╟п╣я┌я│я▐ п╢п╣я│п╨я─п╦п©я┌п╬я─, п╬я┌п╩п╦я┤п╟п╣я┌я│я▐ п╬я┌ SOCK_STREAM.
п·я┬п╦п╠п╨п╟ п©я─п╬я┌п╬п╨п╬п╩п╟.

п╒п╟п╨п╤п╣, Linux accept() п╪п╬п╤п╣я┌ п╥п╟п╡п╣я─я┬п╦я┌я▄я│я▐ я│ п╬я┬п╦п╠п╨п╬п╧ п╣я│п╩п╦:

п÷я─п╟п╡п╦п╩п╟ п╪п╣п╤я│п╣я┌п╣п╡п╬пЁп╬ я█п╨я─п╟п╫п╟ п╥п╟п©я─п╣я┴п╟я▌я┌ я│п╬п╣п╢п╦п╫п╣п╫п╦п╣.

п▓п╢п╬п╠п╟п╡п╬п╨, п╪п╬пЁя┐я┌ я┌п╟п╨п╤п╣ п╡п╬п╥п╡я─п╟я┴п╟я┌я▄я│я▐ я│п╣я┌п╣п╡я▀п╣ п╬я┬п╦п╠п╨п╦ п╫п╟ п╫п╬п╡п╬п╪ я│п╬п╨п╣я┌п╣ п╦ п╬я┬п╦п╠п╨п╦, п╪п╬пЁя┐я┴п╦п╣ п╡п╬п╥п╫п╦п╨п╫я┐я┌я▄ п╡ п©я─п╬я┌п╬п╨п╬п╩п╣. п═п╟п╥п╩п╦я┤п╫я▀п╣ я▐п╢я─п╟ Linux п╪п╬пЁя┐я┌ п╡п╬п╥п╡я─п╟я┴п╟я┌я▄ п╢я─я┐пЁп╦п╣ п╬я┬п╦п╠п╨п╦, п╫п╟п©я─п╦п╪п╣я─, ENOSR, ESOCKTNOSUPPORT, EPROTONOSUPPORT, ETIMEDOUT. п≈п╫п╟я┤п╣п╫п╦п╣ п╬я┬п╦п╠п╨п╦ ERESTARTSYS п╪п╬п╤п╫п╬ я┐п╡п╦п╢п╣я┌я▄ п©я─п╦ я┌я─п╟я│я│п╦я─п╬п╡п╨п╣.

п▓п∙п═п║п≤п≤

п║п╦я│я┌п╣п╪п╫я▀п╧ п╡я▀п╥п╬п╡ accept4() п╢п╬я│я┌я┐п©п╣п╫ п╡ Linux п╫п╟я┤п╦п╫п╟я▐ я│ п╡п╣я─я│п╦п╦ 2.6.28; п©п╬п╢п╢п╣я─п╤п╨п╟ п╡ glibc п╢п╬я│я┌я┐п©п╫п╟ п╫п╟я┤п╦п╫п╟я▐ я│ п╡п╣я─я│п╦п╦ 2.10.

п║п·п·п╒п▓п∙п╒п║п╒п▓п≤п∙ п║п╒п░п²п■п░п═п╒п░п°

accept(): POSIX.1-2001, SVr4, 4.4BSD, (accept() п╡п©п╣я─п╡я▀п╣ п©п╬я▐п╡п╦п╩я│я▐ п╡ 4.2BSD).

accept4() я▐п╡п╩я▐п╣я┌я│я▐ п╫п╣я│я┌п╟п╫п╢п╟я─я┌п╫я▀п╪ я─п╟я│я┬п╦я─п╣п╫п╦п╣п╪ Linux.

п▓ Linux п╫п╬п╡я▀п╧ я│п╬п╨п╣я┌, п╡п╬п╥п╡я─п╟я┴п╟п╣п╪я▀п╧ accept(), п╫п╣ п╫п╟я│п╩п╣п╢я┐п╣я┌ я└п╟п╧п╩п╬п╡я▀п╣ я└п╩п╟пЁп╦ я│п╬я│я┌п╬я▐п╫п╦я▐ я┌п╟п╨п╦п╣ п╨п╟п╨ O_NONBLOCK п╦ O_ASYNC п╬я┌ п©я─п╬я│п╩я┐я┬п╦п╡п╟я▌я┴п╣пЁп╬ я│п╬п╨п╣я┌п╟. п╜я┌п╬ п©п╬п╡п╣п╢п╣п╫п╦п╣ п╬я┌п╩п╦я┤п╟п╣я┌я│я▐ п╬я┌ п╨п╟п╫п╬п╫п╦я┤п╣я│п╨п╬п╣ я─п╣п╟п╩п╦п╥п╟я├п╦п╦ я│п╬п╨п╣я┌п╬п╡ BSD. п÷п╣я─п╣п╫п╬я│п╦п╪я▀п╣ п©я─п╬пЁя─п╟п╪п╪я▀ п╫п╣ п╢п╬п╩п╤п╫я▀ п©п╬п╩п╟пЁп╟я┌я▄я│я▐ п╫п╟ п╫п╟я│п╩п╣п╢я┐п╣п╪п╬я│я┌я▄ я└п╟п╧п╩п╬п╡я▀я┘ я└п╩п╟пЁп╬п╡ я│п╬я│я┌п╬я▐п╫п╦я▐ п╦п╩п╦ п╣я▒ п╬я┌я│я┐я┌я│я┌п╡п╦я▐ п╦ п╡я│п╣пЁп╢п╟ п╢п╬п╩п╤п╫я▀ я┐я│я┌п╟п╫п╟п╡п╩п╦п╡п╟я┌я▄ п╫п╟ я│п╬п╨п╣я┌п╣, п©п╬п╩я┐я┤п╣п╫п╫п╬п╪ п╬я┌ accept(), п╡я│п╣ я┌я─п╣п╠я┐п╣п╪я▀п╣ я└п╩п╟пЁп╦.

п≈п░п°п∙п╖п░п²п≤п╞

п▓ POSIX.1-2001 п╫п╣ я┌я─п╣п╠я┐п╣я┌я│я▐ п╡п╨п╩я▌я┤п╣п╫п╦п╣ <sys/types.h>, п╦ я█я┌п╬я┌ п╥п╟пЁп╬п╩п╬п╡п╬я┤п╫я▀п╧ я└п╟п╧п╩ п╫п╣ я┌я─п╣п╠я┐п╣я┌я│я▐ п╡ Linux. п·п╢п╫п╟п╨п╬, п╫п╣п╨п╬я┌п╬я─я▀п╣ я│я┌п╟я─я▀п╣ (BSD) я─п╣п╟п╩п╦п╥п╟я├п╦п╦ я┌я─п╣п╠я┐я▌я┌ п╢п╟п╫п╫я▀п╧ я└п╟п╧п╩, п╦ п©п╣я─п╣п╫п╬я│п╦п╪я▀п╣ п©я─п╦п╩п╬п╤п╣п╫п╦я▐ п╢п╩я▐ п©я─п╣п╢п╬я│я┌п╬я─п╬п╤п╫п╬я│я┌п╦, п╡п╣я─п╬я▐я┌п╫п╬, п╡п╨п╩я▌я┤п╟я┌ п╣пЁп╬.

п▓п╬п╥п╪п╬п╤п╫п╬ п╫п╣ п╡я│п╣пЁп╢п╟ п╠я┐п╢п╣я┌ п╬п╤п╦п╢п╟п╫п╦п╣ п©п╬п╢п╨п╩я▌я┤п╣п╫п╦я▐ п©п╬я│п╩п╣ п╢п╬я│я┌п╟п╡п╨п╦ SIGIO; п╦п╩п╦ select(2) п╦п╩п╦ poll(2) п╡п╣я─п╫я┐я┌ я│п╬п╠я▀я┌п╦п╣ п╢п╬я│я┌я┐п©п╫п╬я│я┌п╦ я┤я┌п╣п╫п╦я▐, я┌п╟п╨ п╨п╟п╨ п©п╬п╢п╨п╩я▌я┤п╣п╫п╦п╣ п╪п╬п╤п╣я┌ п╠я▀я┌я▄ я┐п╢п╟п╩п╣п╫п╬ п╦п╥-п╥п╟ п╟я│п╦п╫я┘я─п╬п╫п╫п╬п╧ я│п╣я┌п╣п╡п╬п╧ п╬я┬п╦п╠п╨п╬п╧ п╦п╩п╦ п╢я─я┐пЁп╟я▐ п╫п╦я┌я▄ п╠я▀п╩п╟ п╡я▀п╥п╡п╟п╩п╟ я─п╟п╫я▄я┬п╣ accept(). п╜я┌п╬ я█я┌п╬ я│п╩я┐я┤п╟п╣я┌я│я▐, я┌п╬ п╡я▀п╥п╬п╡ п╠п╩п╬п╨п╦я─я┐п╣я┌я│я▐, п╬п╤п╦п╢п╟я▐ я│п╩п╣п╢я┐я▌я┴п╣пЁп╬ п©я─п╦п╠я▀я┌п╦я▐ п©п╬п╢п╨п╩я▌я┤п╣п╫п╦я▐. п╖я┌п╬п╠я▀ п╠я▀я┌я▄ я┐п╡п╣я─п╣п╫п╫я▀п╪, я┤я┌п╬ accept() п╫п╦п╨п╬пЁп╢п╟ п╫п╣ п╥п╟п╠п╩п╬п╨п╦я─я┐п╣я┌я│я▐, я│п╬п╨п╣я┌я┐ sockfd п╫п╣п╬п╠я┘п╬п╢п╦п╪п╬ я┐я│я┌п╟п╫п╬п╡п╦я┌я▄ я└п╩п╟пЁ O_NONBLOCK (я│п╪. socket(7)).

п╒п╦п© socklen_t

п╒я─п╣я┌п╦п╧ п╟я─пЁя┐п╪п╣п╫я┌ accept() п©п╣я─п╡п╬п╫п╟я┤п╟п╩я▄п╫п╬ п╬п╠я┼я▐п╡п╩я▐п╩я│я▐ п╨п╟п╨ int * (п╦ я┌п╟п╨ п╠я▀п╩п╬ п╡ libc4, libc5 п╦ п╪п╫п╬пЁп╦я┘ п╢я─я┐пЁп╦я┘ я│п╦я│я┌п╣п╪п╟я┘ я┌п╦п©п╟ 4.x BSD, SunOS 4, SGI); п╡ я│я┌п╟п╫п╢п╟я─я┌п╣ я┤п╣я─п╫п╬п╡п╦п╨п╟ POSIX.1g п╥п╟я┘п╬я┌п╣п╩п╦ п╦п╥п╪п╣п╫п╦я┌я▄ п╣пЁп╬ п╫п╟ size_t *, п╦ я┌п╟п╨ я│п╢п╣п╩п╟п╫п╬ п╡ SunOS 5. п÷п╬п╥п╢п╫п╦п╣ я┤п╣я─п╫п╬п╡п╦п╨п╦ POSIX я│п╬п╢п╣я─п╤п╟я┌ socklen_t *, п╦ я┌п╟п╨ я│п╢п╣п╩п╟п╫п╬ п╡ Single Unix Specification п╦ glibc2. п╕п╦я┌п╦я─я┐я▐ п⌡п╦п╫я┐я│п╟ п╒п╬я─п╡п╟п╩я▄п╢я│п╟ (Linus Torvalds):

"_п⌡я▌п╠п╟я▐_ п╫п╬я─п╪п╟п╩я▄п╫п╟я▐ п╠п╦п╠п╩п╦п╬я┌п╣п╨п╟ _п╢п╬п╩п╤п╫п╟_ п╦п╪п╣я┌я▄ "socklen_t" я─п╟п╥п╪п╣я─п╬п╪ я│ int. п⌡я▌п╠п╬п╧ п╢я─я┐пЁп╬п╧ п╡п╟я─п╦п╟п╫я┌ п╩п╬п╪п╟п╣я┌ я─п╣п╟п╩п╦п╥п╟я├п╦я▌ BSD-я│п╬п╨п╣я┌п╬п╡. п▓ POSIX _я│п╫п╟я┤п╟п╩п╟_ls п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╩п╦ size_t, п╫п╬ я▐ (п╦, п╨ я│я┤п╟я│я┌я▄я▌, п╨я┌п╬-я┌п╬ п╣я┴я▒, я┘п╬я┌я▐ п╦ п╫п╣ я│п╩п╦я┬п╨п╬п╪ п╪п╫п╬пЁп╦п╣) п╬я┤п╣п╫я▄ пЁя─п╬п╪п╨п╬ п©п╬п╤п╟п╩п╬п╡п╟п╩п╦я│я▄. п╒п╟п╨п╟я▐ я─п╣п╟п╩п╦п╥п╟я├п╦я▐ п╡п╬п╬п╠я┴п╣ п╫п╣ я─п╟п╠п╬я┌п╟п╣я┌, я┌п╟п╨ п╨п╟п╨ size_t п╬я┤п╣п╫я▄ я─п╣п╢п╨п╬ п╦п╪п╣п╣я┌ я┌п╬я┌ п╤п╣ я─п╟п╥п╪п╣я─, я┤я┌п╬ п╦ "int", п╫п╟п©я─п╦п╪п╣я─, п╫п╟ 64-п╠п╦я┌п╫я▀я┘ п╟я─я┘п╦я┌п╣п╨я┌я┐я─п╟я┘. п╜я┌п╬ п╫п╣п╬п╠я┘п╬п╢п╦п╪п╬ _я┌п╬п╩я▄п╨п╬_ п©п╬я┌п╬п╪я┐, я┤я┌п╬ я┌п╟п╨ я│п╢п╣п╩п╟п╫п╬ п╡ п╦п╫я┌п╣я─я└п╣п╧я│п╣ BSD-я│п╬п╨п╣я┌п╬п╡. п▓ п╩я▌п╠п╬п╪ я│п╩я┐я┤п╟п╣, п╩я▌п╢п╦ п╦п╥ POSIX п╫п╟п╨п╬п╫п╣я├ п©п╬п╫я▐п╩п╦ п╦ я│п╬п╥п╢п╟п╩п╦ "socklen_t". п▓п╬п╬п╠я┴п╣, я│ я│п╟п╪п╬пЁп╬ п╫п╟я┤п╟п╩п╟ п╬п╫п╦ п©я─п╬я│я┌п╬ п╫п╣ п╢п╬п╩п╤п╫я▀ п╠я▀п╩п╦ п╫п╦я┤п╣пЁп╬ я┌я─п╬пЁп╟я┌я▄, п╫п╬ п©п╬ п╨п╟п╨п╬п╧-я┌п╬ п©я─п╦я┤п╦п╫п╣ п╬п╫п╦ я┤я┐п╡я│я┌п╡п╬п╡п╟п╩п╦, я┤я┌п╬ п╢п╬п╩п╤п╫я▀ п╦я│п©п╬п╩я▄п╥п╬п╡п╟я┌я▄ п╦п╪п╣п╫п╬п╡п╟п╫п╫я▀п╧ я┌п╦п© (п╡п╣я─п╬я▐я┌п╫п╬, п╬п╫п╦ п╫п╣ я┘п╬я┌п╣п╩п╦ я┐п╢п╟я─п╦я┌я▄ п╡ пЁя─я▐п╥я▄ п╩п╦я├п╬п╪ я│п╢п╣п╩п╟п╡ пЁп╩я┐п©п╬я│я┌я▄, п©п╬я█я┌п╬п╪я┐ п╬п╫п╦ я┌п╦я┘п╬ п©п╣я─п╣п╦п╪п╣п╫п╬п╡п╟п╩п╦ п╪п╣я│я┌п╬, п╡ п╨п╬я┌п╬я─п╬п╪ п©я─п╬я│я┤п╦я┌п╟п╩п╦я│я▄)."

п÷п═п≤п°п∙п═

п║п╪. bind(2).

п║п°п·п╒п═п≤п╒п∙ п╒п░п п√п∙

bind(2), connect(2), listen(2), select(2), socket(2), socket(7)

2009-02-23 Linux