|
|
1.1 ! root 1: .TH RECV 2 "7 July 1983" ! 2: .UC 4 ! 3: .SH NAME ! 4: recv, recvfrom, recvmsg \- receive a message from a socket ! 5: .SH SYNOPSIS ! 6: .nf ! 7: .ft B ! 8: #include <sys/types.h> ! 9: #include <sys/socket.h> ! 10: .PP ! 11: .ft B ! 12: cc = recv(s, buf, len, flags) ! 13: int cc, s; ! 14: char *buf; ! 15: int len, flags; ! 16: .PP ! 17: .ft B ! 18: cc = recvfrom(s, buf, len, flags, from, fromlen) ! 19: int cc, s; ! 20: char *buf; ! 21: int len, flags; ! 22: struct sockaddr *from; ! 23: int *fromlen; ! 24: .PP ! 25: .ft B ! 26: cc = recvmsg(s, msg, flags) ! 27: int cc, s; ! 28: struct msghdr msg[]; ! 29: int flags; ! 30: .ft R ! 31: .SH DESCRIPTION ! 32: .IR Recv , ! 33: .IR recvfrom , ! 34: and ! 35: .IR recvmsg ! 36: are used to receive messages from a socket. ! 37: .PP ! 38: The ! 39: .I recv ! 40: call may be used only on a ! 41: .I connected ! 42: socket (see ! 43: .IR connect (2)), ! 44: while ! 45: .I recvfrom ! 46: and ! 47: .I recvmsg ! 48: may be used to receive data on a socket whether ! 49: it is in a connected state or not. ! 50: .PP ! 51: If ! 52: .I from ! 53: is non-zero, the source address of the message is filled in. ! 54: .I Fromlen ! 55: is a value-result parameter, initialized to the size of ! 56: the buffer associated with ! 57: .IR from , ! 58: and modified on return to indicate the actual size of the ! 59: address stored there. ! 60: The length of the message is returned in ! 61: .IR cc . ! 62: If a message is too long to fit in the supplied buffer, ! 63: excess bytes may be discarded depending on the type of socket ! 64: the message is received from; see ! 65: .IR socket (2). ! 66: .PP ! 67: If no messages are available at the socket, the ! 68: receive call waits for a message to arrive, unless ! 69: the socket is nonblocking (see ! 70: .IR ioctl (2)) ! 71: in which case a ! 72: .I cc ! 73: of \-1 is returned with the external variable errno ! 74: set to EWOULDBLOCK. ! 75: .PP ! 76: The ! 77: .IR select (2) ! 78: call may be used to determine when more data arrives. ! 79: .PP ! 80: The ! 81: .I flags ! 82: argument to a receive call is formed by ! 83: .IR or 'ing ! 84: one or more of the values, ! 85: .PP ! 86: .nf ! 87: .RS ! 88: .DT ! 89: #define MSG_PEEK 0x1 /* peek at incoming message */ ! 90: #define MSG_OOB 0x2 /* process out-of-band data */ ! 91: .RE ! 92: .fi ! 93: .PP ! 94: The ! 95: .I recvmsg ! 96: call uses a ! 97: .I msghdr ! 98: structure to minimize the number of directly supplied parameters, ! 99: and to receive file descriptors from another process (Unix domain only). ! 100: This structure has the following form, as defined in ! 101: .IR <sys/socket.h> : ! 102: .PP ! 103: .nf ! 104: .RS ! 105: .DT ! 106: struct msghdr { ! 107: caddr_t msg_name; /* optional address */ ! 108: int msg_namelen; /* size of address */ ! 109: struct iov *msg_iov; /* scatter/gather array */ ! 110: int msg_iovlen; /* # elements in msg_iov */ ! 111: caddr_t msg_accrights; /* access rights sent/received */ ! 112: int msg_accrightslen; ! 113: }; ! 114: .RE ! 115: .fi ! 116: .PP ! 117: Here ! 118: .I msg_name ! 119: and ! 120: .I msg_namelen ! 121: specify the destination address if the socket is unconnected; ! 122: .I msg_name ! 123: may be given as a null pointer if no names are desired or required. ! 124: The ! 125: .I msg_iov ! 126: and ! 127: .I msg_iovlen ! 128: describe the scatter gather locations, as described in ! 129: .IR read (2). ! 130: Access rights to be sent along with the message are specified ! 131: in ! 132: .IR msg_accrights , ! 133: which has length ! 134: .IR msg_accrightslen . ! 135: .LP ! 136: .I RECEIVING OUT-OF-BAND DATA IN INTERNET DOMAIN ! 137: .LP ! 138: When out-of-band data arrives at a socket, the system could signal ! 139: a group of processes, or a specific process, or no process at all. ! 140: .RS ! 141: ! 142: - If the socket's process group id is ! 143: .I positive, ! 144: the system signals all process in that process group. ! 145: ! 146: - If the socket's process group id is ! 147: .I negative, ! 148: the system only signals the process whose process id is the absolute ! 149: value of the socket's process group id. ! 150: ! 151: - If the socket's process group id is 0 (the default value), ! 152: the system does not signal any process. ! 153: ! 154: .RE ! 155: To assign a socket process group id, use the ! 156: .I ioctl(2) ! 157: system call with the command ! 158: .I SIOCSPGRP. ! 159: .LP ! 160: .I RECEIVING FILE DESCRIPTORS IN UNIX DOMAIN ! 161: .LP ! 162: In Unix domain, process ! 163: .I A ! 164: can open a set of files, then send these file descriptors to process ! 165: .I B. ! 166: Process ! 167: .I B ! 168: then can read or write those files which were already opened (and ! 169: perhaps accessible only) by ! 170: .I A. ! 171: .LP ! 172: The active process stores the file descriptors ! 173: in the field ! 174: .I msg_accrights ! 175: of the structure ! 176: .I msghdr, ! 177: and use the system call ! 178: .I sendmsg(2) ! 179: to send the descriptors. The passive process then can receive the ! 180: descriptors via the system call ! 181: .I recvmsg(2); ! 182: the descriptors are returned in the field ! 183: .I msg_accrights ! 184: of ! 185: .I msghdr. ! 186: .SH "RETURN VALUE ! 187: These calls return the number of bytes received, or \-1 ! 188: if an error occurred. ! 189: .SH ERRORS ! 190: The calls fail if: ! 191: .TP 20 ! 192: [EBADF] ! 193: The argument \fIs\fP is an invalid descriptor. ! 194: .TP 20 ! 195: [ENOTSOCK] ! 196: The argument \fIs\fP is not a socket. ! 197: .TP 20 ! 198: [EWOULDBLOCK] ! 199: The socket is marked non-blocking and the receive operation ! 200: would block. ! 201: .TP 20 ! 202: [EINTR] ! 203: The receive was interrupted by delivery of a signal before ! 204: any data was available for the receive. ! 205: .TP 20 ! 206: [EFAULT] ! 207: The data was specified to be received into a non-existent ! 208: or protected part of the process address space. ! 209: .SH SEE ALSO ! 210: read(2), send(2), socket(2). See also bind(2) for address formats ! 211: in different communication domains.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.