recv

Autres langues

Langue: ru

Autres versions - même langue

Version: Apr 1999 (openSuse - 09/10/07)

Section: 2 (Appels système)

îáú÷áîéå

recv, recvfrom, recvmsg - ÐÏÌÕÞÉÔØ ÓÏÏÂÝÅÎÉÅ ÉÚ ÓÏËÅÔÁ

ëòáôëáñ ó÷ïäëá

#include <sys/types.h>
#include <sys/socket.h>

int recv(int s, void *buf, size_t len, int flags);

int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

int recvmsg(int s, struct msghdr *msg, int flags);

ïðéóáîéå

óÉÓÔÅÍÎÙÅ ×ÙÚÏ×Ù recvfrom É recvmsg ÉÓÐÏÌØÚÕÀÔÓÑ ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÓÏÏÂÝÅÎÉÊ ÉÚ ÓÏËÅÔÁ, É ÍÏÇÕÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÄÁÎÎÙÈ, ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ÔÏÇÏ, Ñ×ÌÑÅÔÓÑ ÌÉ ÓÏËÅÔ ÏÒÉÅÎÔÉÒÏ×ÁÎÎÙÍ ÎÁ ÓÏÅÄÉÎÅÎÉÑ ÉÌÉ ÎÅÔ.

åÓÌÉ ÐÁÒÁÍÅÔÒ from ÎÅ ÒÁ×ÅÎ NULL, Á ÓÏËÅÔ ÎÅ Ñ×ÌÑÅÔÓÑ ÏÒÉÅÎÔÉÒÏ×ÁÎÎÙÍ ÎÁ ÓÏÅÄÉÎÅÎÉÑ, ÔÏ ÁÄÒÅÓ ÏÔÐÒÁ×ÉÔÅÌÑ × ÓÏÏÂÝÅÎÉÉ ÎÅ ÚÁÐÏÌÎÑÅÔÓÑ. áÒÇÕÍÅÎÔ fromlen ÐÅÒÅÄÁÅÔÓÑ ÐÏ ÓÓÙÌËÅ, × ÎÁÞÁÌÅ ÉÎÉÃÉÁÌÉÚÉÒÕÅÔÓÑ ÒÁÚÍÅÒÏÍ ÂÕÆÅÒÁ, Ó×ÑÚÁÎÎÏÇÏ Ó from, Á ÐÒÉ ×ÏÚ×ÒÁÔÅ ÉÚ ÆÕÎËÃÉÉ ÓÏÄÅÒÖÉÔ ÄÅÊÓÔ×ÉÔÅÌØÎÙÊ ÒÁÚÍÅÒ ÁÄÒÅÓÁ.

÷ÙÚÏ× recv ÏÂÙÞÎÏ ÉÓÐÏÌØÚÕÅÔÓÑ ÔÏÌØËÏ ÎÁ ÓÏÅÄÉÎÅÎÎÏÍ ÓÏËÅÔÅ (ÓÍ. connect(2)) É ÉÄÅÎÔÉÞÅÎ ×ÙÚÏ×Õ recvfrom Ó ÐÁÒÁÍÅÔÒÏÍ from, ÕÓÔÁÎÏ×ÌÅÎÎÙÍ × NULL.

÷ÓÅ ÔÒÉ ÆÕÎËÃÉÉ ×ÏÚ×ÒÁÝÁÀÔ ÄÌÉÎÕ ÓÏÏÂÝÅÎÉÑ ÐÒÉ ÕÓÐÅÛÎÏÍ ÚÁ×ÅÒÛÅÎÉÉ. åÓÌÉ ÓÏÏÂÝÅÎÉÅ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÅ É ÎÅ ÐÏÍÅÓÔÉÌÏÓØ × ÐÒÅÄÏÓÔÁ×ÌÅÎÎÙÊ ÂÕÆÅÒ, ÌÉÛÎÉÅ ÂÁÊÔÙ ÍÏÇÕÔ ÂÙÔØ ÏÔÂÒÏÛÅÎÙ, × ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÔÉÐÁ ÓÏËÅÔÁ, ÎÁ ËÏÔÏÒÏÍ ÐÒÉÎÉÍÁÀÔÓÑ ÓÏÏÂÝÅÎÉÑ (ÓÍ. socket(2)).

åÓÌÉ ÎÁ ÓÏËÅÔÅ ÎÅ ÄÏÓÔÕÐÎÏ ÎÉ ÏÄÎÏÇÏ ÓÏÏÂÝÅÎÉÑ, ÔÏ ÏÂÓÕÖÄÁÅÍÙÅ ÆÕÎËÃÉÉ ÏÖÉÄÁÀÔ ÉÈ ÐÒÉÂÙÔÉÑ, ÅÓÌÉ ÓÏËÅÔ ÎÅ ÐÏÍÅÞÅÎ ËÁË ÎÅÂÌÏËÉÒÕÀÝÉÊ (ÓÍ. fcntl(2)), × ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ×ÏÚ×ÒÁÝÁÅÔÓÑ ÚÎÁÞÅÎÉÅ -1, Á ×ÎÅÛÎÑÑ ÐÅÒÅÍÅÎÎÁÑ errno ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ × ÚÎÁÞÅÎÉÅ EAGAIN. ÷ÓÅ ÜÔÉ ÆÕÎËÃÉÉ ÏÂÙÞÎÏ ×ÏÚ×ÒÁÝÁÀÔ ÕÖÅ ÄÏÓÔÕÐÎÙÅ ÄÁÎÎÙÅ ×ÐÌÏÔØ ÄÏ ÚÁÐÒÏÛÅÎÎÏÇÏ ÏÂßÅÍÁ, É ÎÅ ÖÄÕÔ, ÐÏËÁ ÐÏÑ×ÑÔÓÑ ÄÁÎÎÙÅ ÐÏÌÎÏÊ ÚÁÐÒÏÛÅÎÎÏÊ ÄÌÉÎÙ.

óÉÓÔÅÍÎÙÅ ×ÙÚÏ×Ù select(2) ÉÌÉ poll(2) ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÄÌÑ ÏÐÒÅÄÅÌÅÎÉÑ ÐÏÑ×ÌÅÎÉÑ ÎÏ×ÙÈ ÄÁÎÎÙÈ.

áÒÇÕÍÅÎÔ flags ÓÉÓÔÅÍÎÏÇÏ ×ÙÚÏ×Á recv ÆÏÒÍÉÒÕÅÔÓÑ Ó ÐÏÍÏÝØÀ ÏÂßÅÄÉÎÅÎÉÑ ÌÏÇÉÞÅÓËÏÊ ÏÐÅÒÁÃÉÅÊ éìé ÏÄÎÏÇÏ ÉÌÉ ÂÏÌÅÅ ÎÉÖÅÓÌÅÄÕÀÝÉÈ ÚÎÁÞÅÎÉÊ:

MSG_OOB
üÔÏÔ ÆÌÁÇ ÚÁÐÒÁÛÉ×ÁÅÔ ÐÒÉÅÍ ×ÎÅÐÏÔÏËÏ×ÙÈ ÄÁÎÎÙÈ, ËÏÔÏÒÙÅ × ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ÎÅ ÂÙÌÉ ÂÙ ÐÏÌÕÞÅÎÙ × ÏÂÙÞÎÏÍ ÐÏÔÏËÅ ÄÁÎÎÙÈ. îÅËÏÔÏÒÙÅ ÐÒÏÔÏËÏÌÙ ÐÏÍÅÝÁÀÔ ÄÁÎÎÙÅ ÐÏ×ÙÛÅÎÎÏÊ ÓÒÏÞÎÏÓÔÉ × ÎÁÞÁÌÏ ÏÂÙÞÎÏÊ ÏÞÅÒÅÄÉ ÄÁÎÎÙÈ, É ÐÏÜÔÏÍÕ ÜÔÏÔ ÆÌÁÇ ÎÅ ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ Ó ÔÁËÉÍÉ ÐÒÏÔÏËÏÌÁÍÉ.
MSG_PEEK
üÔÏÔ ÆÌÁÇ ÚÁÓÔÁ×ÌÑÅÔ ×ÙÂÒÁÔØ ÄÁÎÎÙÅ ÉÚ ÎÁÞÁÌÁ ÏÞÅÒÅÄÉ, ÎÏ ÎÅ ÕÄÁÌÑÔØ ÉÈ ÏÔÔÕÄÁ. ôÁËÉÍ ÏÂÒÁÚÏÍ, ÐÏÓÌÅÄÕÀÝÉÊ ×ÙÚÏ× ÆÕÎËÃÉÉ ×ÅÒÎÅÔ ÔÅ ÖÅ ÓÁÍÙÅ ÄÁÎÎÙÅ.
MSG_WAITALL
üÔÏÔ ÆÌÁÇ ÐÒÏÓÉÔ ÐÏÄÏÖÄÁÔØ, ÐÏËÁ ÎÅ ÐÒÉÄÅÔ ÐÏÌÎÏÅ ÚÁÐÒÏÛÅÎÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÄÁÎÎÙÈ. ïÄÎÁËÏ, ÜÔÏÔ ×ÙÚÏ× ×ÓÅ ÒÁ×ÎÏ ÍÏÖÅÔ ×ÅÒÎÕÔØ ÍÅÎØÛÅ ÄÁÎÎÙÈ, ÞÅÍ ÂÙÌÏ ÚÁÐÒÏÛÅÎÏ, ÅÓÌÉ ÂÙÌ ÐÏÊÍÁÎ ÓÉÇÎÁÌ, ÐÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÉÌÉ ÒÁÚÒÙ× ÓÏÅÄÉÎÅÎÉÑ, ÉÌÉ ÅÓÌÉ ÎÁÞÁÌÉ ÐÏÓÔÕÐÁÔØ ÄÁÎÎÙÅ ÄÒÕÇÏÇÏ ÔÉÐÁ, ÎÅ ÔÏÇÏ, ËÏÔÏÒÙÊ ÂÙÌ ÓÎÁÞÁÌÁ.
MSG_TRUNC
÷ÏÚ×ÒÁÝÁÅÔ ÒÅÁÌØÎÕÀ ÄÌÉÎÕ ÐÁËÅÔÁ, ÄÁÖÅ ÅÓÌÉ ÏÎÁ ÂÙÌÁ ÂÏÌØÛÅ, ÞÅÍ ÐÒÅÄÏÓÔÁ×ÌÅÎÎÙÊ ÂÕÆÅÒ. üÔÏÔ ÆÌÁÇ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÏÌØËÏ Ó ÐÁËÅÔÎÙÍÉ ÐÒÏÔÏËÏÌÁÍÉ.
MSG_ERRQUEUE
ðÏÌÕÞÉÔØ ÐÁËÅÔ ÉÚ ÏÞÅÒÅÄÉ ÏÛÉÂÏË.
MSG_NOSIGNAL
üÔÏÔ ÆÌÁÇ ÏÔËÌÀÞÁÅÔ ×ÏÚÎÉËÎÏ×ÅÎÉÅ ÓÉÇÎÁÌÁ SIGPIPE ÎÁ ÐÏÔÏËÏ×ÙÈ ÓÏËÅÔÁÈ, ÅÓÌÉ ÄÒÕÇÁÑ ÓÔÏÒÏÎÁ ×ÄÒÕÇ ÉÓÞÅÚÁÅÔ.
MSG_ERRQUEUE
õËÁÚÁÎÉÅ ÜÔÏÇÏ ÆÌÁÇÁ ÐÏÚ×ÏÌÑÅÔ ÐÏÌÕÞÉÔØ ÉÚ ÏÞÅÒÅÄÉ ÏÛÉÂÏË ÓÏËÅÔÁ ÎÁËÏÐÉ×ÛÉÅÓÑ ÏÛÉÂËÉ. ëÁÖÄÁÑ ÏÛÉÂËÁ ÐÅÒÅÄÁÅÔÓÑ ×Ï ×ÓÐÏÍÏÇÁÔÅÌØÎÏÍ ÓÏÏÂÝÅÎÉÉ, ÞÅÊ ÔÉÐ ÚÁ×ÉÓÉÔ ÏÔ ÐÒÏÔÏËÏÌÁ (ÄÌÑ IPv4 ÜÔÉÍ ÔÉÐÏÍ Ñ×ÌÑÅÔÓÑ IP_RECVERR). ðÏÌØÚÏ×ÁÔÅÌØ ÄÏÌÖÅÎ ÐÒÅÄÏÓÔÁ×ÉÔØ ÂÕÆÅÒ ÄÏÓÔÁÔÏÞÎÏÊ ÄÌÉÎÙ. óÍ. cmsg(3) É ip(7), ÇÄÅ ÐÒÉ×ÅÄÅÎÁ ÄÏÐÏÌÎÉÔÅÌØÎÁÑ ÉÎÆÏÒÍÁÃÉÑ. óÏÄÅÒÖÉÍÏÅ ÉÓÈÏÄÎÏÇÏ ÐÁËÅÔÁ, ËÏÔÏÒÙÊ ÐÒÉ×ÅÌ Ë ÏÛÉÂËÅ, ÐÅÒÅÄÁÅÔÓÑ × ×ÉÄÅ ÏÂÙÞÎÙÈ ÄÁÎÎÙÈ Ó ÐÏÍÏÝØÀ msg_iovec. éÓÈÏÄÎÙÊ ÁÄÒÅÓ ÎÁÚÎÁÞÅÎÉÑ ÄÁÔÁÇÒÁÍÍÙ, ËÏÔÏÒÁÑ ×ÙÚ×ÁÌÁ ÏÛÉÂËÕ, ÐÅÒÅÄÁÅÔÓÑ Ó ÐÏÍÏÝØÀ msg_name.
äÌÑ ÌÏËÁÌØÎÙÈ ÏÛÉÂÏË ÁÄÒÅÓ ÎÅ ÐÅÒÅÄÁÅÔÓÑ (ÜÔÏ ÍÏÖÎÏ ×ÙÑÓÎÉÔØ, ÐÒÏ×ÅÒÉ× ÐÏÌÅ cmsg_len ÓÔÒÕËÔÕÒÙ cmsghdr). äÌÑ ÏÛÉÂÏË ÐÒÉ ÐÒÉÅÍÅ × msghdr ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ MSG_ERRQUEUE. ðÏÓÌÅ ÔÏÇÏ, ËÁË ÏÛÉÂËÁ ÐÅÒÅÄÁÎÁ ÐÒÏÇÒÁÍÍÅ, ÓÌÅÄÕÀÝÁÑ ÏÛÉÂËÁ × ÏÞÅÒÅÄÉ ÏÛÉÂÏË ÓÔÁÎÏ×ÉÔÓÑ ÏÖÉÄÁÀÝÅÊ ÏÛÉÂËÏÊ É ÐÅÒÅÄÁÅÔÓÑ ÐÒÏÇÒÁÍÍÅ ÐÒÉ ÓÌÅÄÕÀÝÅÊ ÏÐÅÒÁÃÉÉ ÎÁ ÓÏËÅÔÅ.
ïÛÉÂËÁ ÈÒÁÎÉÔÓÑ × ÓÔÒÕËÔÕÒÅ sock_extended_err:



#define SO_EE_ORIGIN_NONE       0

#define SO_EE_ORIGIN_LOCAL      1

#define SO_EE_ORIGIN_ICMP       2

#define SO_EE_ORIGIN_ICMP6      3



struct sock_extended_err

{

    __u32           ee_errno;   /* ÎÏÍÅÒ ÏÛÉÂËÉ */

    __u8            ee_origin;  /* ÉÓÔÏÞÎÉË Å£ ÐÒÏÉÓÈÏÖÄÅÎÉÑ */ 

    __u8            ee_type;    /* ÔÉÐ */

    __u8            ee_code;    /* ËÏÄ */

    __u8            ee_pad;

    __u32           ee_info;    /* ÄÏÐÏÌÎÉÔÅÌØÎÁÑ ÉÎÆÏÒÍÁÃÉÑ */

    __u32           ee_data;    /* ÐÒÏÞÉÅ ÄÁÎÎÙÅ */  

};



struct sockaddr *SOCK_EE_OFFENDER(struct sock_extended_err *);



ee_errno ÓÏÄÅÒÖÉÔ ÚÎÁÞÅÎÉÅ errno ÄÌÑ ÏÖÉÄÁÀÝÅÊ ÏÛÉÂËÉ. ee_origin ÉÓÔÏÞÎÉË ÐÒÏÉÓÈÏÖÄÅÎÉÑ ÏÛÉÂËÉ. óÍÙÓÌ ÏÓÔÁÌØÎÙÈ ÐÏÌÅÊ ÚÁ×ÉÓÉÔ ÏÔ ÐÒÏÔÏËÏÌÁ. SOCK_EE_OFFENDER ×ÏÚ×ÒÁÝÁÅÔ ÕËÁÚÁÔÅÌØ ÎÁ ÁÄÒÅÓ ÓÅÔÅ×ÏÇÏ ÏÂßÅËÔÁ, ÐÏÒÏÄÉ×ÛÅÇÏ ÏÛÉÂËÕ. åÓÌÉ ÜÔÏÔ ÁÄÒÅÓ ÎÅÉÚ×ÅÓÔÅÎ, ÔÏ ÞÌÅÎ sa_family ÓÔÒÕËÔÕÒÙ sockaddr ÓÏÄÅÒÖÉÔ ÚÎÁÞÅÎÉÅ AF_UNSPEC, Á ÐÒÏÞÉÅ ÐÏÌÑ ÓÔÒÕËÔÕÒÙ ÎÅ ÏÐÒÅÄÅÌÅÎÙ. óÏÄÅÒÖÉÍÏÅ ÐÁËÅÔÁ, ×ÙÚ×Á×ÛÅÇÏ ÏÛÉÂËÕ, ÐÅÒÅÄÁÀÔÓÑ × ×ÉÄÅ ÏÂÙÞÎÙÈ ÄÁÎÎÙÈ.
äÌÑ ÌÏËÁÌØÎÙÈ ÏÛÉÂÏË ÁÄÒÅÓ ÎÅ ÐÅÒÅÄÁÅÔÓÑ (ÜÔÏ ÍÏÖÎÏ ÐÒÏ×ÅÒÉÔØ, ×ÚÇÌÑÎÕ× ÎÁ ÞÌÅÎ cmsg_len ÓÔÒÕËÔÕÒÙ cmsghdr). ðÒÉ ÐÒÉÅÍÅ ÏÛÉÂÏË × ÓÔÒÕËÔÕÒÅ msghdr ÕÓÔÁÎÏ×ÌÅÎ ÆÌÁÇ MSG_ERRQUEUE. ðÏÓÌÅ ÔÏÇÏ, ËÁË ÏÛÉÂËÁ ÂÙÌÁ ÐÅÒÅÄÁÎÁ, ÓÌÅÄÕÀÝÁÑ × ÏÞÅÒÅÄÉ ÏÛÉÂËÁ ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ÐÅÒÅÇÅÎÅÒÁÃÉÉ ÏÛÉÂËÉ ÓÏËÅÔÁ, É ÉÍÅÎÎÏ ÏÎÁ ÂÕÄÅÔ ×ÏÚ×ÒÁÝÅÎÁ ÐÒÉ ÓÌÅÄÕÀÝÅÊ ÏÐÅÒÁÃÉÉ Ó ÜÔÉÍ ÓÏËÅÔÏÍ.

óÉÓÔÅÍÎÙÊ ×ÙÚÏ× recvmsg ÉÓÐÏÌØÚÕÅÔ ÓÔÒÕËÔÕÒÕ msghdr ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÍÉÎÉÍÉÚÉÒÏ×ÁÔØ ËÏÌÉÞÅÓÔ×Ï ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÐÅÒÅÄÁ×ÁÅÍÙÈ ÐÁÒÁÍÅÔÒÏ×. üÔÁ ÓÔÒÕËÔÕÒÁ ÏÐÒÅÄÅÌÅÎÁ × <sys/socket.h> ÔÁË:




struct msghdr {

    void         * msg_name;     /* ÎÅÏÂÑÚÁÔÅÌØÎÙÊ ÁÄÒÅÓ */

    socklen_t    msg_namelen;    /* ÒÁÚÍÅÒ ÁÄÒÅÓÁ */

    struct iovec * msg_iov;      /* ÍÁÓÓÉ× ÄÌÑ scatter/gather */

    size_t       msg_iovlen;     /* ËÏÌ-×Ï ÜÌÅÍÅÎÔÏ× × msg_iov */

    void         * msg_control;  /* ×ÓÐÏÍÏÇÁÔÅÌØÎÙÅ ÄÁÎÎÙÅ, ÓÍ. ÎÉÖÅ */

    socklen_t    msg_controllen; /* ÄÌÉÎÁ ÂÕÆÅÒÁ ×ÓÐÏÍÏÇÁÔÅÌØÎÙÈ ÄÁÎÎÙÈ */

    int          msg_flags;      /* ÆÌÁÇÉ ÐÒÉÎÑÔÏÇÏ ÓÏÏÂÝÅÎÉÑ */

};



úÄÅÓØ msg_name É msg_namelen ÚÁÄÁÀÔ ÁÄÒÅÓ ÎÁÚÎÁÞÅÎÉÑ, ÅÓÌÉ ÓÏËÅÔ ÎÅ ÓÏÅÄÉÎÅÎ; × ÐÁÒÁÍÅÔÒÅ msg_name ÍÏÖÎÏ ÐÅÒÅÄÁÔØ NULL, ÅÓÌÉ ÉÍÅÎÁ ÎÅ ÔÒÅÂÕÀÔÓÑ ÉÌÉ ×ÏÏÂÝÅ ÎÅÖÅÌÁÔÅÌØÎÙ. ðÏÌÑ msg_iov É msg_iovlen ÏÐÉÓÙ×ÁÀÔ ÔÏÞËÉ scatter-gather, ÞÔÏ ÏÂÓÕÖÄÁÅÔÓÑ × readv(2). ðÏÌÅ msg_control, ÉÍÅÀÝÅÅ ÄÌÉÎÕ msg_controllen, ÕËÁÚÙ×ÁÅÔ ÎÁ ÂÕÆÅÒ ÄÌÑ ÄÒÕÇÉÈ ÓÏÏÂÝÅÎÉÊ, Ó×ÑÚÁÎÎÙÈ Ó ÕÐÒÁ×ÌÅÎÉÅÍ ÐÒÏÔÏËÏÌÏ×, ÉÌÉ ÎÁ ÂÕÆÅÒ ÄÌÑ ÒÁÚÎÏÏÂÒÁÚÎÙÈ ×ÓÐÏÍÏÇÁÔÅÌØÎÙÈ ÄÁÎÎÙÈ. ëÏÇÄÁ ×ÙÚÙ×ÁÅÔÓÑ recvmsg, × ÐÁÒÁÍÅÔÒÅ msg_controllen ÄÏÌÖÎÁ ÎÁÈÏÄÉÔØÓÑ ÄÌÉÎÁ ÄÏÓÔÕÐÎÏÇÏ ÂÕÆÅÒÁ, ÞÅÊ ÁÄÒÅÓ ÐÅÒÅÄÁÅÔÓÑ × msg_control; ÐÒÉ ÕÓÐÅÛÎÏÍ ÚÁ×ÅÒÛÅÎÉÉ × ÜÔÏÍ ÐÁÒÁÍÅÔÒÅ ÂÕÄÅÔ ÎÁÈÏÄÉÔØÓÑ ÄÌÉÎÁ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ËÏÎÔÒÏÌØÎÙÈ ÓÏÏÂÝÅÎÉÊ.

óÏÏÂÝÅÎÉÑ ÉÍÅÀÔ ÔÁËÕÀ ÆÏÒÍÕ:




struct cmsghdr {

    socklen_t   cmsg_len;   /* ËÏÌÉÞÅÓÔ×Ï ÂÁÊÔ ÄÁÎÎÙÈ, */

                            /* ×ËÌÀÞÁÑ hdr */

    int         cmsg_level; /* ÐÒÏÔÏËÏÌ  */

    int         cmsg_type;  /* ÔÉÐ, ÚÁ×ÉÓÑÝÉÊ ÏÔ ÐÒÏÔÏËÏÌÁ */

/* ÄÁÌØÛÅ ÓÌÅÄÕÅÔ

    u_char      cmsg_data[]; */

};



ë ×ÓÐÏÍÏÇÁÔÅÌØÎÙÍ ÄÁÎÎÙÍ ÎÕÖÎÏ ÏÂÒÁÝÁÔØÓÑ ÔÏÌØËÏ Ó ÐÏÍÏÝØÀ ÍÁËÒÏÓÏ×, ÏÐÒÅÄÅÌÅÎÎÙÈ × cmsg(3).

îÁÐÒÉÍÅÒ, Linux ÉÓÐÏÌØÚÕÅÔ ÜÔÏÔ ÍÅÈÁÎÉÚÍ ×ÓÐÏÍÏÇÁÔÅÌØÎÙÈ ÄÁÎÎÙÈ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÐÅÒÅÄÁ×ÁÔØ ÞÅÒÅÚ Unix-ÓÏËÅÔÙ ÒÁÓÛÉÒÅÎÎÙÅ ÏÛÉÂËÉ, ÆÌÁÇÉ IP É ÆÁÊÌÏ×ÙÅ ÄÅÓËÒÉÐÔÏÒÙ.

ðÏÌÅ msg_flags × msghdr ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ÐÒÉ ×ÏÚ×ÒÁÔÅ ÉÚ recvmsg(2). ïÎÏ ÍÏÖÅÔ ÓÏÄÅÒÖÁÔØ ÎÅÓËÏÌØËÏ ÆÌÁÇÏ×:

MSG_EOR
ÏÚÎÁÞÁÅÔ "ËÏÎÅà ÚÁÐÉÓÉ": ×ÏÚ×ÒÁÝÅÎÎÙÅ ÄÁÎÎÙÅ ÚÁËÁÎÞÉ×ÁÀÔ ÚÁÐÉÓØ (ÏÂÙÞÎÏ ÉÓÐÏÌØÚÕÅÔÓÑ ×ÍÅÓÔÅ Ó ÓÏËÅÔÁÍÉ ÔÉÐÁ SOCK_SEQPACKET).
MSG_TRUNC
ÏÚÎÁÞÁÅÔ, ÞÔÏ È×ÏÓÔÏ×ÁÑ ÞÁÓÔØ ÄÁÔÁÇÒÁÍÍÙ ÂÙÌÁ ÏÔÂÒÏÛÅÎÁ, ÐÏÔÏÍÕ ÞÔÏ ÄÁÔÁÇÒÁÍÍÁ ÂÙÌÁ ÂÏÌØÛÅ, ÞÅÍ ÐÒÅÄÏÓÔÁ×ÌÅÎÎÙÊ ÂÕÆÅÒ.
MSG_CTRUNC
ÏÚÎÁÞÁÅÔ, ÞÔÏ ÞÁÓÔØ ÕÐÒÁ×ÌÑÀÝÉÈ ÄÁÎÎÙÈ ÂÙÌÁ ÏÔÂÒÏÛÅÎÁ ÉÚ-ÚÁ ÎÅÄÏÓÔÁÔËÁ ÍÅÓÔÁ × ÂÕÆÅÒÅ ×ÓÐÏÍÏÇÁÔÅÌØÎÙÈ ÄÁÎÎÙÈ.
MSG_OOB
×ÏÚ×ÒÁÝÁÅÔÓÑ ÄÌÑ ÉÎÄÉËÁÃÉÉ ÐÏÌÕÞÅÎÉÑ ×ÎÅÐÏÔÏËÏ×ÙÈ ÄÁÎÎÙÈ.
MSG_ERRQUEUE
ÏÚÎÁÞÁÅÔ, ÞÔÏ ÂÙÌÉ ÐÏÌÕÞÅÎÙ ÎÅ ÄÁÎÎÙÅ, Á ÒÁÓÛÉÒÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ ÏÂ ÏÛÉÂËÅ ÉÚ ÏÞÅÒÅÄÉ ÏÛÉÂÏË ÓÏËÅÔÁ.
MSG_DONTWAIT
òÁÚÒÅÛÁÅÔ ÎÅÂÌÏËÉÒÕÀÝÉÊ ÒÅÖÉÍ. åÓÌÉ ÏÐÅÒÁÃÉÑ ÍÏÇÌÁ ÂÙ ÐÒÉ×ÅÓÔÉ Ë ÂÌÏËÉÒÏ×ËÅ, ×ÏÚ×ÒÁÝÁÅÔÓÑ EAGAIN (ÜÔÏÔ ÒÅÖÉÍ ÍÏÖÎÏ ÔÁËÖÅ ×ËÌÀÞÉÔØ Ó ÐÏÍÏÝØÀ O_NONBLOCK É ÆÕÎËÃÉÉ F_SETFL ÓÉÓÔÅÍÎÏÇÏ ×ÙÚÏ×Á fcntl(2)).

÷ïú÷òáýáåíïå úîáþåîéå

üÔÉ ÓÉÓÔÅÍÎÙÅ ×ÙÚÏ×Ù ×ÏÚ×ÒÁÝÁÀÔ ËÏÌÉÞÅÓÔ×Ï ÐÒÉÎÑÔÙÈ ÂÁÊÔ ÉÌÉ -1, ÅÓÌÉ ÐÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ.

ïûéâëé

åÓÔØ ÎÅÓËÏÌØËÏ ÓÔÁÎÄÁÒÔÎÙÈ ÏÛÉÂÏË, ×ÏÚ×ÒÁÝÁÅÍÙÈ Ó ÕÒÏ×ÎÑ ÓÏËÅÔÏ×. íÏÇÕÔ ÔÁËÖÅ ÐÏÑ×ÉÔØÓÑ ÄÒÕÇÉÅ ÏÛÉÂËÉ, ×ÏÚ×ÒÁÝÁÅÍÙÅ ÉÚ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ÐÒÏÔÏËÏÌØÎÙÈ ÍÏÄÕÌÅÊ; ÉÈ ÏÐÉÓÁÎÉÅ ÎÁÈÏÄÉÔÓÑ ÎÁ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ÓÔÒÁÎÉÃÁÈ ÒÕËÏ×ÏÄÓÔ×Á.
EBADF
áÒÇÕÍÅÎÔ s Ñ×ÌÑÅÔÓÑ ÎÅ×ÅÒÎÙÍ ÄÅÓËÒÉÐÔÏÒÏÍ.
ECONNREFUSED
óÅÔÅ×ÏÊ ËÏÍÐØÀÔÅÒ Ó ÄÒÕÇÏÊ ÓÔÏÒÏÎÙ ÏÔËÁÚÁÌÓÑ ÕÓÔÁÎÁ×ÌÉ×ÁÔØ ÓÅÔÅ×ÏÅ ÓÏÅÄÉÎÅÎÉÅ (ÏÂÙÞÎÏ ÐÏÔÏÍÕ, ÞÔÏ ÔÁÍ ÎÅ ÒÁÂÏÔÁÅÔ ÚÁÐÒÏÛÅÎÎÙÊ ÓÅÒ×ÉÓ).
ENOTCONN
óÏËÅÔ, Ó×ÑÚÁÎÎÙÊ Ó ÐÒÏÔÏËÏÌÏÍ, ÏÒÉÅÎÔÉÒÏ×ÁÎÎÙÍ ÎÁ ÓÏÅÄÉÎÅÎÉÑ, ÎÅ ÂÙÌ ÓÏÅÄÉÎÅÎ (ÓÍ. ÏÐÉÓÁÎÉÅ ÆÕÎËÃÉÊ connect(2) É accept(2)).
ENOTSOCK
áÒÇÕÍÅÎÔ s ÎÅ Ñ×ÌÑÅÔÓÑ ÓÏËÅÔÏÍ.
EAGAIN
óÏËÅÔ ÐÏÍÅÞÅÎ ËÁË ÎÅÂÌÏËÉÒÕÀÝÉÊ, Á ÏÐÅÒÁÃÉÑ ÐÒÉÅÍÁ ÄÁÎÎÙÈ ÍÏÇÌÁ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÅÇÏ, ÉÌÉ ÖÅ ÂÙÌ ÕÓÔÁÎÏ×ÌÅÎ ÔÁÊÍ-ÁÕÔ ÎÁ ÐÒÉÅÍ ÄÁÎÎÙÈ, É ÜÔÏÔ ÔÁÊÍ-ÁÕÔ ÚÁËÏÎÞÉÌÓÑ, Á ÄÁÎÎÙÅ ÔÁË É ÎÅ ÂÙÌÉ ÐÒÉÎÑÔÙ.
EINTR
ðÒÉÅÍ ÄÁÎÎÙÈ ÂÙÌ ÐÒÅÒ×ÁÎ ÓÉÇÎÁÌÏÍ, Á ÄÁÎÎÙÅ ÅÝÅ ÎÅ ÂÙÌÉ ÄÏÓÔÕÐÎÙ.
EFAULT
õËÁÚÁÔÅÌØ ÎÁ ÐÒÉÅÍÎÙÊ ÂÕÆÅÒ ÕËÁÚÙ×ÁÅÔ ×ÎÅ ÁÄÒÅÓÎÏÇÏ ÐÒÏÓÔÒÁÎÓÔ×Á ÐÒÏÃÅÓÓÁ.
EINVAL
ðÅÒÅÄÁÎ ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ.

óïïô÷åôóô÷éå óôáîäáòôáí

4.4BSD (ÜÔÉ ÓÉÓÔÅÍÎÙÅ ×ÙÚÏ×Ù ×ÐÅÒ×ÙÅ ÐÏÑ×ÉÌÉÓØ × 4.2BSD).

úáíåþáîéå

÷ÙÛÅÐÒÉ×ÅÄÅÎÎÙÅ ÐÒÏÔÏÔÉÐÙ ÓÏÏÔ×ÅÔÓÔ×ÕÀÔ glibc2. óÔÁÎÄÁÒÔ SUS ÓÏÇÌÁÓÅÎ Ó ÎÉÍÉ, ÚÁ ÉÓËÌÀÞÅÎÉÅÍ ÔÏÇÏ, ÞÔÏ ÔÁÍ ×ÏÚ×ÒÁÝÁÅÍÙÅ ÚÎÁÞÅÎÉÑ ÏÐÒÅÄÅÌÅÎÙ ËÁË ssize_t (ÔÏÇÄÁ ËÁË × BSD 4.x, libc4 É libc5 ÏÎÉ ÏÐÒÅÄÅÌÅÎÙ ËÁË int). áÒÇÕÍÅÎÔ flags Ñ×ÌÑÅÔÓÑ int × BSD 4.x, ÎÏ unsigned int × libc4 É libc5. áÒÇÕÍÅÎÔ len Ñ×ÌÑÅÔÓÑ int × BSD 4.x, ÎÏ size_t × libc4 É libc5. áÒÇÕÍÅÎÔ fromlen Ñ×ÌÑÅÔÓÑ int * × BSD 4.x, libc4 É libc5. ôÅËÕÝÅÅ ÏÐÒÅÄÅÌÅÎÉÅ, socklen_t, ÂÙÌÏ ÉÚÏÂÒÅÔÅÎÏ × POSIX (ÓÍ. ÔÁËÖÅ accept(2)).

óíïôòé ôáëöå

fcntl(2), read(2), select(2), getsockopt(2), socket(2), cmsg(3)

ðåòå÷ïä

Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999-2001