Rechercher une page de manuel
recv
Langue: ru
Version: Apr 1999 (openSuse - 09/10/07)
Section: 2 (Appels système)
Sommaire
îáú÷áîéå
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-2001Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre