
рдмрд░реНрдХрд▓реЗ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╕реЗ рд╕реЙрдХреЗрдЯ рдореЙрдбрд▓, рдЬреЛ рдХрдИ рдорд╛рдпрдиреЛрдВ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реНрддрд░ рдкрд░ рд╕рдВрдЧрдд рд╣реИрдВ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЗрддрдирд╛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдирд╣реАрдВ рд╣реИред
рдЖрдЗрдП рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХреБрдЫ рдореБрд╢реНрдХрд┐рд▓ рдЕрдВрддрд░реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ, рдЬреЛ рдХрд┐ рдПрдХ рдУрдПрд╕ рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рджреВрд╕рд░реЗ рдУрдПрд╕ рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рдХреЙрд▓ рдХреЛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЖрд░рдкреАрд╕реА рд▓рд┐рдЦрддреЗ рд╕рдордп рдкрд╛рдП рдЧрдП рдереЗред
рд╕реЙрдХреЗрдЯ рдкреНрд░рдХрд╛рд░
- рдмреАрдПрд╕рдбреА: int
- рдЬреАрдд: рд╢реВрдиреНрдп * // рдореИрдХреНрд░реЛ рд╕реНрдЯреЙрдХ
рдЬрдм рддрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдХреНрд╖рдорддрд╛ 32 рдмрд┐рдЯреНрд╕ рд╣реЛрддреА рд╣реИ, рддрдм рддрдХ рдЗрдВрдЯрд░рдЪреЗрдВрдЬ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ 64 рдмрд┐рдЯреНрд╕ рдкрд░, SOCKET рдкреНрд░рдХрд╛рд░ рдЖрдХрд╛рд░ рдореЗрдВ 2 рдЧреБрдирд╛ рдмрдбрд╝рд╛ рд╣реИред
рдмреАрдПрд╕рдбреА рд╕реЙрдХреЗрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреБрдЫ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдПрдХ рд╕рд╛рде рд╕реЙрдХреЗрдЯ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рджреЛрдиреЛрдВ рдХреЗ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ "рд╢рд╛рдпрдж рд╣реА рдХрднреА" рдХреЙрд▓ рдЬреИрд╕реЗ рдХрд░реАрдмреА (), fcntl () рдФрд░ ioctl ())ред
рдПрдХ рд╕рд╛рдЗрдб рдЗрдлрд╝реЗрдХреНрдЯ рднреА рд╣реИ рдЬреЛ рди рдХреЗрд╡рд▓ рд╡рд┐рдХрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдмрд░реНрдХрд▓реЗ рдореЙрдбрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реЙрдХреЗрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ (100 рд╕реЗ рдХрдо) рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЧрдП рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ 1. рднрд┐рдиреНрди рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред Microsoft рдореЙрдбрд▓ рдореЗрдВ, рдРрд╕рд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рддреБрд░рдВрдд 200 рд╕реЗ рдЕрдзрд┐рдХ (рд▓рдЧрднрдЧ), рдФрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рдЖрдХрд╛рд░ (рд╕реЙрдХреЗрдЯ) рджреНрд╡рд╛рд░рд╛ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред
рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐
- рдмреАрдПрд╕рдбреА: рдХреЙрд▓реНрд╕ рд░рд┐рдЯрд░реНрди -1, рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдЕрд╢реБрджреНрдз рд╕реЗрдЯ рд╣реИред
- рдЬреАрдд: рдХреЙрд▓ -1 (рдореИрдХреНрд░реЛ SOCKET_ERROR), рд╕реНрдерд┐рддрд┐ WSAGetLastError () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред
Errno рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЕрд░реНрде рд╣реИрдВред
рд╕реЙрдХреЗрдЯреНрд╕ рдмрдирд╛рдирд╛:
рд╕реЙрдХреЗрдЯ (рдЗрдВрдЯ рдЕрдл, рдЗрдВрдЯ рдкреНрд░рдХрд╛рд░, рдЗрдВрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓);
рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдмреАрдПрд╕рдбреА рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЕрд░реНрде рд╣реИред рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ рдЕрднреА рднреА рд╕рдорд╛рди рд╣реИрдВред
рд╕реЙрдХреЗрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
- рдмреАрдПрд╕рдбреА:
getsockopt (int sockfd, int level, int option_name, void * option_value, socklen_t * option_len);
setsockopt (int sockfd, int level, int option_name, void const * option_value, socklen_t option_len)
- рдЬреАрдд:
getsockopt (SOCKET sock, int level, int option_name, void * option_value, socklen_t * option_len);
setsockopt (SockET тАЛтАЛsock, int level, int option_name, void const * option_value, socklen_t option_len)
рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдмреАрдПрд╕рдбреА рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЕрд░реНрде рд╣реИред
рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ 2
- BSD: fcntl (int fd, int cmd, ...);
- рдЬреАрдд: ioctlsocket (SOCKET рдЬреБрд░реНрд░рд╛рдм, рд▓рдВрдмреА cmd, рд▓рдВрдмреЗ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд * arg);
рдПрдХрдорд╛рддреНрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдореИрдкрд┐рдВрдЧ: fcntl (рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░, F_SETFL, O_NONBLOCK) -> ioctlsocket (рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░, FIONBIO, рдорд╛рди O_NBLBLOCK рдХреЗ рд╕рд╛рде рдЪрд░ рдХрд╛ рдкрддрд╛)ред рдЭрдВрдбреЗ рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╡реЗ рдмреАрдПрд╕рдбреА рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЕрд▓рдЧ рд╣реИрдВ)ред
рдЙрд╕реА рд╕рдордп, fcntl (рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░, F_GETFL) рдЬреИрд╕реА рдХреНрд╡реЗрд░реА 0 рдпрд╛ O_RRWR рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреА рд╣реИред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рд╕реЙрдХреЗрдЯ 3
- BSD: ioctl (int fd, int cmd, ...);
- рдЬреАрдд: ioctlsocket (SOCKET рдЬреБрд░реНрд░рд╛рдм, рд▓рдВрдмреА cmd, рд▓рдВрдмреЗ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд * arg);
рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде ioctl () рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреА рдЕрднреА рддрдХ рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред
рдбреАрдПрдирдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
getaddrinfo (рдЪрд╛рд░ рдХрд╛рдВрд╕реНрдЯ * рдиреЛрдб, рдЪрд╛рд░ рдХрд╛рдВрд╕реНрдЯ * рд╕рд░реНрд╡рд┐рд╕, рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдПрдбреНрд░реАрдиреЛ рдХреЙрдиреНрд╕ * рд╕рдВрдХреЗрдд, рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдПрдбреНрд░реАрдиреЛ ** рдмреНрд▓рд░)
- рдмреАрдПрд╕рдбреА:
рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдПрдбреНрд░реАрдиреЛ
{
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
socklen_t ai_addrlen;
рд╕рдВрд░рдЪрдирд╛ sockaddr * ai_addr;
char * ai_canonname;
рд╕рдВрд░рдЪрдирд╛ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ * ai_next;
};
- рдЬреАрдд:
рдЯрд╛рдЗрдкрдбрд┐рдл рд╕рдВрд░рдЪрдирд╛ рдПрдбреНрд░реАрдиреЛ
{
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
size_t ai_addrlen;
char * ai_canonname;
рд╕рдВрд░рдЪрдирд╛ sockaddr_ * ai_addr;
рд╕рдВрд░рдЪрдирд╛ addrinfo_ * ai_next;
} ADDRINFOA, * PADDRINFOA;
рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦреЗрдВред ai_addr рдФрд░ ai_canonname рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдлрд╕реЗрдЯ рд╣реИрдВред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡реИрдк рдХрд┐рдпрд╛ (рдорд┐рд╢реНрд░рд┐рдд рдХрд┐рдпрд╛?)ред
рдбреЗрдЯрд╛ рдЕрдЧреНрд░реЗрд╖рдг
- рдмреАрдПрд╕рдбреА:
recv (int sockfd, void * рдмрдлрд░, size_t рд▓рдВрдмрд╛рдИ, int рдзреНрд╡рдЬ);
recvfrom (int sockfd, void * рдмрдлрд░, size_t рд▓рдВрдмрд╛рдИ, int рдзреНрд╡рдЬ, рд╕рдВрд░рдЪрдирд╛ sockaddr * рд╕реЗ, socklen_t * fromlen);
send (int sockfd, void const * рдмрдлрд░, size_t рд▓рдВрдмрд╛рдИ, int рдЭрдВрдбреЗ);
sendto (int sockfd, void const * рдмрдлрд░, size_t length, int рдзреНрд╡рдЬ, рд╕рдВрд░рдЪрдирд╛ sockaddr const * to, socklen_t tolen);
- рдЬреАрдд:
recv (SockET тАЛтАЛрдЬреБрд░реНрд░рд╛рдм, рд╢реВрдиреНрдп * рдмрдлрд░, size_t рд▓рдВрдмрд╛рдИ, int рдЭрдВрдбреЗ);
recvfrom (SOCKET рдЬреБрд░реНрд░рд╛рдм, рд╢реВрдиреНрдп * рдмрдлрд░, size_t рд▓рдВрдмрд╛рдИ, int рдЭрдВрдбреЗ, рд╕рдВрд░рдЪрдирд╛ sockaddr * рд╕реЗ, socklen_t * fromlen);
рднреЗрдЬреЗрдВ (SockET тАЛтАЛрдЬреБрд░реНрд░рд╛рдм, рд╢реВрдиреНрдп рдХрд╛рд╕реНрдЯ * рдмрдлрд░, size_t рд▓рдВрдмрд╛рдИ, int рдЭрдВрдбреЗ);
sendto (SockET тАЛтАЛsock, void const * рдмрдлрд░, size_t length, int рдзреНрд╡рдЬ, рд╕рдВрд░рдЪрдирд╛ sockaddr const * to, socklen_t tolen);
рдЪреМрдереЗ рддрд░реНрдХ рдХреЗ рдЭрдВрдбреЗ рдмреАрдПрд╕рдбреА рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЕрд░реНрде рд╣реИрдВред
рд╕рдВрдЪрд╛рд▓рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ
- рдмреАрдПрд╕рдбреА: рдкреЛрд▓ (рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдкреЛрд▓рдлрдб * рдПрдлрдбреАрдПрд╕, рдПрдирдбреАрдПрд╕рдбреАрдЯреА / рдПрдирдПрдлрдбреАрдПрд╕, рдЗрдВрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ);
рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рджреВрд╖рдг
{
int fd;
рдЫреЛрдЯреА рдШрдЯрдирд╛рдУрдВ;
рдЫреЛрдЯреА рдкрд░рд┐рдХреНрд░рдорд╛;
};
- рдЬреАрддреЛ: WSAPoll (рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдкреЛрд▓рдлрдб * fds, nfds_t nfds, int timeout);
рдЯрд╛рдЗрдкрдбрд┐рдл рд╕рдВрд░рдЪрдирд╛ рдкреЛрд▓рдлреЗрдб
{
рд╕реЙрдХреЗрдЯ рдЬреБрд░рдорд╛рдирд╛;
WORD рдИрд╡реЗрдВрдЯ;
WORD рдШреВрдорддрд╛ рд╣реИ;
} WSAPOLLFD, * PWSAPOLLFD;
рдкреЛрд▓рдб рд╕рдВрд░рдЪрдирд╛ рдХреЗ рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдмреАрдПрд╕рдбреА рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдореВрд▓реНрдп рд╣реИред WSAPoll () рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ 6 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг (рд╡рд┐рд╕реНрдЯрд╛) рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
рд╕рдВрдЪрд╛рд▓рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ реи
- BSD: select (int nfds, fd_set * readfds, fd_set * writefds, fd_set * errorfds, рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЯрд╛рдЗрдорд╡реЗрд▓ * рдЯрд╛рдЗрдордЖрдЙрдЯ);
рдЯрд╛рдЗрдкреНрдбрд┐рдлрд╝ рд╕рдВрд░рдЪрдирд╛
{
рд▓рдВрдмреА fds_bits [FD_SETSIZE / 8 * sizeof (рд▓рдВрдмреА)];
} fd_set;
- рдЬреАрддреЛ: рд╕реЗрд▓реЗрдХреНрдЯ (int nfds, FDSET * readfds, FDSET * writefds, FDSET * errorfds, рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЯрд╛рдЗрдорд╡рд╛рд▓ * рдЯрд╛рдЗрдордЖрдЙрдЯ);
typedef рд╕рдВрд░рдЪрдирд╛ fd_set
{
рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд fd_count;
SOCKET fd_array [FD_SETSIZE];
} FDSET, * PFDSET;
рдЪрдпрди рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм fd_set рд╕рдВрд░рдЪрдирд╛ рдореИрдк рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ () рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЙрд▓ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рддреАрди рд╕реЗрдЯреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ: рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдкрдврд╝рдиреЗ, рд▓рд┐рдЦрдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдПред рдЖрдк рдореИрдХреНрд░реЛ FD_SET (рд╕реЙрдХреЗрдЯ, рд╕реЗрдЯ) рджреНрд╡рд╛рд░рд╛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реЙрдХреЗрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - FD_ISSET (рд╕реЙрдХреЗрдЯ, рд╕реЗрдЯ), рд╕реЗрдЯ рд╕реЗ рдПрдХ рд╕реЙрдХреЗрдЯ рд╣рдЯрд╛рдПрдВ - FD_CLR (рд╕реЙрдХреЗрдЯ, рд╕реЗрдЯ), рд╕рдм рдХреБрдЫ рд╣рдЯрд╛рдПрдВ - FD_ZERO (рд╕реЗрдЯ) ред рдХреЙрд▓ рдХреЗ рдмрд╛рдж, рдЪрдпрди () рдЗрд╕реА рд╕реЗрдЯ рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдХреЗрд╡рд▓ рдЙрди рд╕реЙрдХреЗрдЯреНрд╕, рдЬреЛ рдЕрдВрддрд┐рдо рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рджреМрд░рд╛рди, рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред
рдПрдХ рдмреАрдПрд╕рдбреА рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реЙрдХреЗрдЯ рдХреЛ рдПрдХ рд╕реЗрдЯ рдореЗрдВ рдбрд╛рд▓рдиреЗ рд╕реЗ рдЕрдВрддрд┐рдо рдмрд┐рдЯ рдореЗрдВ рд▓рдВрдбрд┐рдВрдЧ рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЙрд╕рдХрд╛ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╡рд┐рд╡рд░рдгрдХрд░реНрддрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред FD_SETSIZE рдЖрдорддреМрд░ рдкрд░ 1024 рд╣реИред рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рддрд░реНрдХ () рддреАрди рд╕реЗрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдореЗрдВ рд╕реЙрдХреЗрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ fds_bits рд╕рд░рдгреА рдореЗрдВ рдереЛрдбрд╝реА рд╕реА рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реАрдорд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реЙрдХреЗрдЯ рд╡рд┐рд╡рд░рдгрдХ рдореВрд▓реНрдп> = FD_SETSIZE рдХреЗ рд╕рд╛рде, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрдпрди рдХреЗ рдХреБрдЫ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдВрдЬреВрд╕ рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рдПрдХ рдЕрд╡рд╢реЗрд╖ рд╣реИред рд╡реИрд╕реЗ, рдпрд╣рд╛рдБ рдХрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ int -> SOCKET рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдкрд╛рдВрддрд░рдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рд╕реЗрдЯ рдореЗрдВ рдПрдХ рд╕реЙрдХреЗрдЯ рдбрд╛рд▓рдХрд░ fd_cray рдПрд░реЗ рдореЗрдВ fd_count рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдбрд╛рд▓рдирд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдмрдврд╝рд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред FD_SETSIZE рдЖрдорддреМрд░ рдкрд░ 64 рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд╣рд▓реЗ рддрд░реНрдХ () рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред