recv(2) - wariua/manpages-ko GitHub Wiki
recv, recvfrom, recvmsg - μμΌμμ λ©μμ§ λ°κΈ°
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);
recv()
, recvfrom()
, recvmsg()
νΈμΆμ μ΄μ©ν΄ μμΌμμ λ©μμ§λ₯Ό λ°λλ€. 무μ°κ²° μμΌκ³Ό μ°κ²° μ§ν₯ μμΌ λͺ¨λμμ λ°μ΄ν°λ₯Ό λ°μ μ μλ€. μ΄ νμ΄μ§μμλ λ¨Όμ μΈ κ°μ§ μμ€ν
νΈμΆμ κ³΅ν΅ κΈ°λ₯μ κΈ°μ ν λ€μ νΈμΆλ€ κ°μ μ°¨μ΄μ μ κΈ°μ νλ€.
recv()
μ read(2)
μ μ μΌν μ°¨μ΄λ flags
μ μ‘΄μ¬ μ¬λΆλ€. flags
μΈμκ° 0μ΄λ©΄ recv()
λ μΌλ°μ μΌλ‘ read(2)
μ λλ±νλ€. (νμ§λ§ NOTES μ°Έκ³ .) λν λ€μ νΈμΆμ
recv(sockfd, buf, len, flags);
λ€μκ³Ό λλ±νλ€.
recvfrom(sockfd, buf, len, flags, NULL, NULL);
μΈ νΈμΆ λͺ¨λ μ±κ³΅ μλ£ μ λ©μμ§ κΈΈμ΄λ₯Ό λ°ννλ€. λ©μμ§κ° λ무 κΈΈμ΄μ μ 곡 λ²νΌμ λ€μ΄κ°μ§ μλ κ²½μ° λ©μμ§λ₯Ό λ°λ μμΌμ μ’ λ₯μ λ°λΌμ λμΉλ λ°μ΄νΈλ€μ λ²λ¦΄ μλ μλ€.
μμ νΈμΆλ€μ μμΌμ λ©μμ§κ° μμΌλ©΄ λ©μμ§κ° λμ°©νκΈ°λ₯Ό κΈ°λ€λ¦°λ€. λ¨ μμΌμ΄ λ
ΌλΈλ‘νΉμ΄λ©΄ (fcntl(2) μ°Έκ³ ) -1 κ°μ λ°ννκ³ μΈλΆ λ³μ errno
λ₯Ό EAGAIN
μ΄λ EWOULDBLOCK
μΌλ‘ μ€μ νλ€. μμ νΈμΆλ€μ λ³΄ν΅ μμ² λ°μ μ μ 체λ₯Ό μμ ν λκΉμ§ κΈ°λ€λ¦¬κΈ°λ³΄λ€λ μ¬μ© κ°λ₯ν λ°μ΄ν°λ₯Ό μ΅λ μμ² ν¬κΈ°λ§νΌ λ°λ‘ λ°ννλ€.
μμ©μμ select(2), poll(2), epoll(7)μ μ΄μ©ν΄ μμΌμ λ°μ΄ν°κ° λ λμ°©νλμ§ μμλΌ μ μλ€.
flags
μΈμλ λ€μ κ°λ€μ 1κ° μ΄μ OR ν΄μ ꡬμ±νλ€.
-
MSG_CMSG_CLOEXEC
(recvmsg()
μ μ©, 리λ μ€ 2.6.23λΆν°) - (unix(7)μμ κΈ°μ νλ)
SCM_RIGHTS
λμμΌλ‘ μ λμ€ λλ©μΈ νμΌ λμ€ν¬λ¦½ν°λ₯Ό ν΅ν΄ μμ νλ νμΌ λμ€ν¬λ¦½ν°μ 'execμμ λ«κΈ°' νλκ·Έλ₯Ό μ€μ νλ€. open(2)μO_CLOEXEC
νλκ·Έμ κ°μ μ΄μ λ‘ μ΄ νλκ·Έκ° μ μ©νλ€. -
MSG_DONTWAIT
(리λ μ€ 2.2λΆν°) - λ
ΌλΈλ‘νΉ λμμ μΌ λ€. λμμ΄ λΈλ‘ λλ €λ κ²½μ° νΈμΆμ΄
EAGAIN
μ΄λEWOULDBLOCK
μΌλ‘ μ€ν¨νλ€. (fcntl(2)F_SETFL
λμμ ν΅ν΄)O_NONBLOCK
νλκ·Έλ₯Ό μ€μ ν κ²½μ°μ λΉμ·ν λμ λ°©μμΈλ°,MSG_DONTWAIT
μ΄ νΈμΆλ³ μ΅μ μΈ λ°λ©΄O_NONBLOCK
μ μ΄λ¦° νμΌ κΈ°μ νλͺ©μ λν μ€μ μ΄μ΄μ (open(2) μ°Έκ³ ) νΈμΆ νλ‘μΈμ€ λ΄ λͺ¨λ μ€λ λλΏ μλλΌ κ°μ μ΄λ¦° νμΌ κΈ°μ νλͺ©μ κ°λ¦¬ν€λ νμΌ λμ€ν¬λ¦½ν°λ₯Ό κ°μ§ λ€λ₯Έ νλ‘μΈμ€μλ μν₯μ λΌμΉκ² λλ€. -
MSG_ERRQUEUE
(리λ μ€ 2.2λΆν°) -
μ΄ νλκ·Έλ μμΌ μ€λ₯ νμ μλ μ€λ₯λ₯Ό λ°μμμΌ ν¨μ λνλΈλ€. 보쑰 λ©μμ§λ‘ μ€λ₯κ° μ λ¬λλ©° κ·Έ νμ μ νλ‘ν μ½μ λ°λΌ λ€λ₯΄λ€. (IPv4μμλ
IP_RECVERR
.) μ¬μ©μκ° μΆ©λΆν ν¬κΈ°μ λ²νΌλ₯Ό μ 곡ν΄μΌ νλ€. μμΈν λ΄μ©μ cmsg(3)μ ip(7)λ₯Ό 보λΌ. μ€λ₯λ₯Ό μ λ°ν μμΈ ν¨ν·μ νμ΄λ‘λκ°msg_iovec
μ ν΅ν΄ μ μ λ°μ΄ν°μ²λΌ μ λ¬λλ€. μ€λ₯λ₯Ό μ λ°ν λ°μ΄ν°κ·Έλ¨μ μλ λͺ©μ μ£Όμκ°msg_name
μΌλ‘ μ 곡λλ€.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 { uint32_t ee_errno; /* μ€λ₯ λ²νΈ */ uint8_t ee_origin; /* μ€λ₯κ° μ΄λμ μλκ° */ uint8_t ee_type; /* νμ */ uint8_t ee_code; /* μ½λ */ uint8_t ee_pad; /* ν¨λ© */ uint32_t ee_info; /* μΆκ° μ 보 */ uint32_t ee_data; /* κΈ°ν λ°μ΄ν° */ /* λ°μ΄ν°κ° λ μ¬ μ μμ */ }; struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);
ee_errno
λ νμ μλ μ€λ₯μerrno
λ²νΈλ₯Ό λ΄λλ€.err_origin
μ μ€λ₯κ° λ°μν κ³³μ λνλ΄λ μ½λμ΄λ€. λλ¨Έμ§λ νλ‘ν μ½λ³ νλμ΄λ€. λ§€ν¬λ‘SOCK_EE_OFFENDER
λ 보쑰 λ©μμ§μ λν ν¬μΈν°λ₯Ό λ°μμ μ€λ₯μ κ·Όμμ΄ λ λ€νΈμν¬ κ°μ²΄μ μ£Όμμ λν ν¬μΈν°λ₯Ό λ°ννλ€. κ·Έ μ£Όμλ₯Ό μμ§ λͺ»νλ©΄sockaddr
μsa_family
κ°AF_UNSPEC
μ λ΄μΌλ©°sockaddr
μ λλ¨Έμ§ νλλ€μ΄ μ μλΌ μμ§ μλ€. μ€λ₯λ₯Ό μ λ°ν ν¨ν·μ νμ΄λ‘λλ μ μ λ°μ΄ν°μ²λΌ μ λ¬λλ€.λ‘컬 μ€λ₯μΈ κ²½μ° μ£Όμκ° μ λ¬λμ§ μλλ€. (
cmsghdr
μcmsg_len
λ©€λ²λ‘ νμΈν μ μλ€.) μ€λ₯ μμ μμλmsghdr
μMSG_ERRQUEUE
νλκ·Έκ° μ€μ λΌ μλ€. μ€λ₯κ° μ λ¬λ νμλ νμ μλ λ€μ μ€λ₯μ κΈ°λ°ν΄μ λ―Έμ²λ¦¬ μμΌ μ€λ₯κ° μ¬μμ±λμ΄ λ€μ μμΌ λμμΌλ‘ μ λ¬λλ€. MSG_OOB
- μ΄ νλκ·Έλ μ μ λ°μ΄ν° μ€νΈλ¦ΌμΌλ‘λ λ°κ² λμ§ μμ λμμΈ λ°μ΄ν° μμ μ μμ²νλ€. μ΄λ€ νλ‘ν μ½μμλ κΈ΄κΈ λ°μ΄ν°λ₯Ό μ μ λ°μ΄ν° ν μ λμ μ§μ΄λ£μΌλ©°, κ·Έλμ κ·Έλ° νλ‘ν μ½μμλ μ΄ νλκ·Έλ₯Ό μ¬μ©ν μ μλ€.
MSG_PEEK
- μ΄ νλκ·Έλ μμ λμμ΄ μμ ν μ²μμ λ°μ΄ν°λ₯Ό λ°ννλ νμμ κ·Έ λ°μ΄ν°λ₯Ό μ κ±°νμ§ μκ² νλ€. λ°λΌμ μ΄μ΄μ§λ μμ νΈμΆμ΄ κ°μ λ°μ΄ν°λ₯Ό λ°ννκ² λλ€.
-
MSG_TRUNC
(리λ μ€ 2.2λΆν°) -
λ‘μ° (
AF_PACKET
), μΈν°λ· λ°μ΄ν°κ·Έλ¨ (리λ μ€ 2.4.27/2.6.8λΆν°), λ·λ§ν¬ (리λ μ€ 2.6.22λΆν°), μ λμ€ λ°μ΄ν°κ·Έλ¨ (리λ μ€ 3.4λΆν°) μμΌμμ: ν¨ν· λ΄μ§ λ°μ΄ν°κ·Έλ¨μ μ€μ κΈΈμ΄κ° μ λ¬ν λ²νΌλ³΄λ€ μ»Έλ κ²½μ°μλ κ·Έ μ€μ κΈΈμ΄λ₯Ό λ°ννλ€.μΈν°λ· μ€νΈλ¦Ό νλ‘ν μ½μμμ μ¬μ©μ λν΄μ tcp(7) μ°Έκ³ .
-
MSG_WAITALL
(리λ μ€ 2.2λΆν°) - μ΄ νλκ·Έλ μμ² μ μ²΄κ° μΆ©μ‘±λ λκΉμ§ λμμ΄ λΈλ‘νκΈ°λ₯Ό μμ²νλ€. νμ§λ§ μκ·Έλμ μ‘κ±°λ, μ€λ₯ λ΄μ§ μ°κ²° λκΉμ΄ λ°μνκ±°λ, λ€μ μμ λ°μ΄ν°κ° λ€λ₯Έ νμ μΈ κ²½μ°μλ μ¬μ ν μμ²λ³΄λ€ μ μ λ°μ΄ν°λ₯Ό λ°νν μ μλ€. λ°μ΄ν°κ·Έλ¨ μμΌμλ μ΄ νλκ·Έκ° ν¨κ³Όκ° μλ€.
recvfrom()
μ μμ ν λ©μμ§λ₯Ό λ²νΌ buf
μ μ§μ΄λ£λλ€. λ²νΌμ ν¬κΈ°λ₯Ό νΈμΆμκ° len
μ μ§μ ν΄μΌ νλ€.
src_addr
μ΄ NULLμ΄ μλλ©° κΈ°λ° νλ‘λ‘μ½μμ λ©μμ§μ μΆλ° μ£Όμλ₯Ό μ 곡νλ κ²½μ° κ·Έ μΆλ° μ£Όμλ₯Ό src_addr
μ΄ κ°λ¦¬ν€λ λ²νΌμ μ§μ΄λ£λλ€. μ΄ κ²½μ°μ addrlen
μ κ°μ΄μ κ²°κ³ΌμΈ μΈμμ΄λ€. νΈμΆ μ μλ src_addr
μ μ°κ³λ λ²νΌμ ν¬κΈ°λ‘ μ΄κΈ°ν ν΄μΌ νλ€. κ·Έλ¦¬κ³ λ°ν μ μΆλ° μ£Όμμ μ€μ ν¬κΈ°λ₯Ό λ΄λλ‘ addrlen
μ΄ κ°±μ λλ€. μ 곡 λ²νΌκ° λ무 μμΌλ©΄ λ°ν μ£Όμκ° μ리λλ°, μ΄ κ²½μ° addrlen
μ΄ νΈμΆμ 쀬λ κ²λ³΄λ€ ν° κ°μ λ°ννκ² λλ€.
νΈμΆμκ° μΆλ° μ£Όμμ κ΄μ¬μ΄ μμΌλ©΄ src_addr
κ³Ό addrlen
μ NULLλ‘ μ§μ ν΄μΌ νλ€.
recv()
νΈμΆμ λ³΄ν΅ μ°κ²° μνμΈ (connect(2)
μ°Έκ³ ) μμΌμμλ§ μ΄λ€. λ€μ νΈμΆκ³Ό λλ±νλ€.
recvfrom(fd, buf, len, flags, NULL, 0);
recvmsg()
νΈμΆμμλ msghdr
ꡬ쑰체λ₯Ό μ¬μ©ν΄ μ§μ μ 곡νλ μΈμλ€μ μλ₯Ό μ€μΈλ€. μ΄ κ΅¬μ‘°μ²΄λ <sys/socket.h>
μ λ€μκ³Ό κ°μ΄ μ μλμ΄ μλ€.
struct iovec { /* μ€μΊν°/κ°λ λ°°μ΄ νλͺ© */
void *iov_base; /* μμ μ£Όμ */
size_t iov_len; /* μ΄λν λ°μ΄νΈ μ */
};
struct msghdr {
void *msg_name; /* μ£Όμ, μ νμ */
socklen_t msg_namelen; /* μ£Όμ ν¬κΈ° */
struct iovec *msg_iov; /* μ€μΊν°/κ°λ λ°°μ΄ */
size_t msg_iovlen; /* msg_iovμ νλͺ© κ°μ */
void *msg_control; /* 보쑰 λ°μ΄ν°, μλ μ°Έκ³ */
size_t msg_controllen; /* 보쑰 λ°μ΄ν° λ²νΌ κΈΈμ΄ */
int msg_flags; /* μμ λ©μμ§μ λν νλκ·Έ */
};
msg_name
νλλ νΈμΆμ ν λΉ λ²νΌλ₯Ό κ°λ¦¬ν€λ©° μμΌμ΄ μ°κ²°λΌ μμ§ μμ κ²½μ° μΆλ° μ£Όμλ₯Ό λ°ννλ λ° μ΄ λ²νΌλ₯Ό μ΄λ€. νΈμΆ μ μ νΈμΆμκ° msg_namelen
μ λ²νΌ ν¬κΈ°λ₯Ό μ€μ ν΄μΌ νλ©° μ±κ³΅ νΈμΆ λ°ν μ msg_namelen
μ΄ λ°ν μ£Όμμ κΈΈμ΄λ₯Ό λ΄κ² λλ€. μμ©μμ μΆλ° μ£Όμλ₯Ό μ νμκ° μμΌλ©΄ msg_name
μ NULLλ‘ μ§μ νλ©΄ λλ€.
msg_iov
λ° msg_iovlen
νλλ readv(2)μμμ²λΌ μ€μΊν°-κ°λ μμΉλ€μ κΈ°μ νλ€.
msg_control
νλλ μ¬ν νλ‘ν μ½ μ μ΄ κ΄λ ¨ λ©μμ§λ μ¬λ¬ 보쑰 λ°μ΄ν°λ₯Ό μν msg_controllen
κΈΈμ΄μ λ²νΌλ₯Ό κ°λ¦¬ν¨λ€. recvmsg()
νΈμΆ μ msg_controllen
μ΄ msg_control
μ κ°μ© λ²νΌ κΈΈμ΄λ₯Ό λ΄κ³ μμ΄μΌ νλ€. μ±κ³΅ νΈμΆ λ°ν μ μ μ΄ λ©μμ§ μ΄μ κΈΈμ΄λ₯Ό λ΄κ² λλ€.
λ©μμ§λ λ€μ ννμ΄λ€.
struct cmsghdr {
size_t cmsg_len; /* λ°μ΄ν° λ°μ΄νΈ κ°μ. ν€λ ν¬ν¨.
(POSIXμμλ νμ
μ΄ socklen_t) */
int cmsg_level; /* κΈ°μ νλ‘ν μ½ */
int cmsg_type; /* νλ‘ν μ½λ³ νμ
*/
/* μ΄μ΄μ:
unsigned char cmsg_data[]; */
};
보쑰 λ°μ΄ν°λ cmsg(3)μ μ μλ λ§€ν¬λ‘λ₯Ό ν΅ν΄μλ§ μ κ·Όν΄μΌ νλ€.
μλ₯Ό λ€μ΄ 리λ μ€μμλ μ΄ λ³΄μ‘° λ°μ΄ν° λ©μ»€λμ¦μ μ΄μ©ν΄ νμ₯ μ€λ₯λ IP μ΅μ μ, κ·Έλ¦¬κ³ μ λμ€ λλ©μΈ μμΌ μμΌλ‘ νμΌ λμ€ν¬λ¦½ν°λ₯Ό μ λ¬νλ€.
recvmsg()
λ°ν μ msghdr
μ msg_flags
νλκ° μ€μ λλ€. μ¬λ¬ νλκ·Έκ° λ΄κΈΈ μ μλ€.
MSG_EOR
- λ μ½λ λ(end-of-record)μ λνλΈλ€. λ°ν λ°μ΄ν°κ° λ μ½λλ₯Ό λλ§μΉλ€. (μΌλ°μ μΌλ‘
SOCK_SEQPACKET
νμ μμΌμμ μ¬μ©) MSG_TRUNC
- λ°μ΄ν°κ·Έλ¨μ΄ μ 곡 λ²νΌλ³΄λ€ 컀μ λ°μ΄ν°κ·Έλ¨ λ λΆλΆμ λ²λ Έμμ λνλΈλ€.
MSG_CTRUNC
- 보쑰 λ°μ΄ν° λ²νΌμ 곡κ°μ΄ λΆμ‘±ν΄μ μΌλΆ μ μ΄ λ°μ΄ν°λ₯Ό λ²λ Έμμ λνλΈλ€.
MSG_OOB
- κΈ΄κΈ λ΄μ§ λμμΈ λ°μ΄ν°λ₯Ό μμ νμμ λνλΈλ€.
MSG_ERRQUEUE
- λ°μ΄ν°λ₯Ό μμ νμ§ μκ³ μμΌ μ€λ₯ νμμ νμ₯ μ€λ₯λ₯Ό λ°μ μμμ λνλΈλ€.
μ΄ νΈμΆλ€μ λ°μ λ°μ΄νΈ μλ₯Ό λ°ννλ€. λλ μ€λ₯ λ°μ μ -1μ λ°ννλ€. μ€λ₯ μμ μ€λ₯λ₯Ό λνλ΄λλ‘ errno
λ₯Ό μ€μ νλ€.
μ€νΈλ¦Ό μμΌ μλκ° μ§μ μλ λ«κΈ°λ₯Ό μννμ λμλ λ°ν κ°μ΄ 0μ΄ λλ€. (μ ν΅μ μΈ "νμΌ λ" λ°ν κ°μ΄λ€.)
μ¬λ¬ (κ°λ Ή μ λμ€ λ° μΈν°λ·) λλ©μΈμ λ°μ΄ν°κ·Έλ¨ μμΌμμλ κΈΈμ΄ 0μΈ λ°μ΄ν°κ·Έλ¨μ νμ©νλ€. κ·Έλ° λ°μ΄ν°κ·Έλ¨μ λ°μμ λ λ°ν κ°μ 0μ΄λ€.
μ€νΈλ¦Ό μμΌμμ μμ μμ²ν λ°μ΄νΈ μκ° 0μΈ κ²½μ°μλ 0 κ°μ λ°νν μ μλ€.
μμΌ κ³μΈ΅μμ μμ±νλ λͺ κ°μ§ νμ€ μ€λ₯κ° μλ€. μΆκ°λ‘ νμ νλ‘ν μ½ λͺ¨λμμ λ€λ₯Έ μ€λ₯λ₯Ό μμ±νμ¬ λ°νν μλ μλ€. νλ‘ν μ½λ³ λ§€λ΄μΌ νμ΄μ§λ₯Ό μ°Έκ³ νλΌ.
-
EAGAIN
λλEWOULDBLOCK
- μμΌμ΄ λ ΌλΈλ‘νΉμΌλ‘ νμλΌ μλλ° μμ λμμ΄ λΈλ‘ λλ € νκ±°λ, μμ νμμμμ΄ μ€μ λΌ μλλ° λ°μ΄ν° μμ μ μ νμμμμ΄ λ§λ£λλ€. POSIX.1μμλ μ΄ κ²½μ°μ μ΄λ μͺ½ μ€λ₯λ λ°νν μ μλ€κ³ νμ©νλ€. λ°λΌμ μ΄μμ±μ΄ μμ΄μΌ νλ μμ©μμλ λ κ°λ₯μ±μ λͺ¨λ νμΈν΄μΌ νλ€.
EBADF
- μΈμ
sockfd
κ° μ ν¨νμ§ μμ νμΌ λμ€ν¬λ¦½ν°μ΄λ€. ECONNREFUSED
- μ격 νΈμ€νΈκ° λ€νΈμν¬ μ°κ²° νμ©μ κ±°λΆνλ€. (보ν΅μ μμ²ν μλΉμ€κ° λμ μ€μ΄μ§ μκΈ° λλ¬Έμ΄λ€.)
EFAULT
- μμ λ²νΌ ν¬μΈν°(λ€)μ΄ νλ‘μΈμ€μ μ£Όμ κ³΅κ° λ°μ κ°λ¦¬ν€κ³ μλ€.
EINTR
- μ¬μ© κ°λ₯ν λ°μ΄ν°κ° μκΈ° μ μ μκ·Έλ μ λ¬μ μν΄ μμ μ΄ μ€λ¨λμλ€. signal(7) μ°Έκ³ .
EINVAL
- μ ν¨νμ§ μμ μΈμλ₯Ό μ λ¬νλ€.
ENOMEM
-
recvmsg()
λ₯Ό μν λ©λͺ¨λ¦¬λ₯Ό ν λΉν μ μλ€. ENOTCONN
- μμΌμ΄ μ°κ²° μ§ν₯ νλ‘ν μ½μ μ°κ³λΌ μλλ° μ°κ²°μ΄ λμ§ μμλ€. (
connect(2)
λ°accept(2)
μ°Έκ³ .) ENOTSOCK
- νμΌ λμ€ν¬λ¦½ν°
sockfd
κ° μμΌμ κ°λ¦¬ν€κ³ μμ§ μλ€.
POSIX.1-2001, POSIX.1-2008, 4.4BSD (4.2BSDμμ μ΄ μΈν°νμ΄μ€λ€μ΄ μ²μ λ±μ₯).
POSIX.1μμλ MSG_OOB
, MSG_PEEK
, MSG_WAITALL
νλκ·Έλ§ κΈ°μ νλ€.
κΈΈμ΄κ° 0μΈ λ°μ΄ν°κ·Έλ¨μ΄ λκΈ° μ€μΈ κ²½μ° read(2)
μ flags
μΈμ 0μΈ recv()
μ λμμ΄ λ€λ₯΄λ€. μ΄ κ²½μ°μ read(2)
λ ν¨λ ₯μ΄ μμ§λ§ (λ°μ΄ν°κ·Έλ¨μ΄ λκΈ° μ€μΌλ‘ λ¨λλ€) recv()
λ λκΈ° μ€μΈ λ°μ΄ν°κ·Έλ¨μ μλͺ¨νλ€.
socklen_t
νμ
μ POSIXμμ κ³ μν κ²μ΄λ€. accept(2)
λ μ°Έκ³ .
POSIX.1μ λ°λ₯΄λ©΄ msghdr
ꡬ쑰체μ msg_controllen
νλκ° socklen_t
νμ
μ΄μ΄μΌ νμ§λ§ glibcμμλ νμ¬ size_t
νμ
μΌλ‘ νκ³ μλ€.
νΈμΆ ν λ²μ μ¬λ¬ λ°μ΄ν°κ·Έλ¨μ μμ ν μ μλ 리λ μ€ μ μ© μμ€ν νΈμΆμ λν λ΄μ©μ recvmmsg(2)λ₯Ό 보λΌ.
getaddrinfo(3)μμ recvfrom()
μ¬μ©λ‘λ₯Ό λ³Ό μ μλ€.
fcntl(2), getsockopt(2)
, read(2)
, recvmmsg(2), select(2), shutdown(2), socket(2), cmsg(3), sockatmark(3), ip(7), ipv6(7), socket(7), tcp(7), udp(7), unix(7)
2017-09-15