Linux?????????recvmsg???sendmsg??????
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux?????????recvmsg???sendmsg??????相关的知识,希望对你有一定的参考价值。
??????????????? ?????? ddr ?????? ?????? ?????? ?????? des ?????????
recvmsg ??? sendmsg ??????
#include <sys/types.h>
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
???????????????????????????????????????????????? msghdr ???????????????
struct msghdr {
void *msg_name; // protocol address
socklen_t msg_namelen; // size of protocol address
struct iovec *msg_iov; // scatter/gather array
int msg_iovlen; // elements in msg_iov
void *msg_control; // ancillary data (cmsghdr struct)
socklen_t msg_controllen; // length of ancillary data
int msg_flags; // flags returned by recvmsg()
};
- msg_name ??? msg_namelen ??????????????????????????????????????????????????????????????? UDP ??????????????????????????? recvfrom ??? sendto ?????????????????????????????????
- msg_name ?????????????????????????????????????????????????????????????????????????????? sendmsg ??????????????????????????????recvmsg????????????????????????????????????????????????????????????????????? TCP ????????????????????? UDP ???????????????msg_name ?????????????????????
- msg_namelen ?????? sendmsg ??????????????????????????? recvmsg ???????????????-???????????????
- msg_iov ??? msg_iovlen ?????????????????????????????????????????????????????????iovec???????????????????????? readv ??? writev ?????????????????????????????????
- msg_control ??? msg_controllen ???????????????????????????????????????????????????????????????msg_controllen ?????? recvmsg ????????????-???????????????
?????? recvmsg ??? sendmsg?????????????????????????????????????????????
- ????????????????????? flags ?????????
- ????????????????????? msghdr ????????? msg_flags ?????????????????????????????????????????????????????????????????????????????????
- ?????? recvmsg ?????? msg_flags ?????????recvmsg ???????????????flags ?????????????????? msg_flags ??????????????????????????????????????????????????????????????????????????? recvmsg ??????????????? msg_flags ???????????????
- sendmsg ????????? msg_flags ?????????????????????????????? flags ????????????????????????????????????????????????????????????????????? sendmsg ??????????????? MSG_DONTWAIT ?????????????????? flags ??????????????????????????? msg_flags ????????????????????????????????????
recvmsg ????????? 7 ??????????????????
- MSG_BCAST??????????????? BSD/OS ??????????????????????????????????????????????????????????????????????????????????????????????????? IP ????????????????????????????????? IP_RECVD-STADDR ?????????????????????????????????????????????????????? UPD ?????????????????????????????????????????????????????????
- MSG_MCAST??????????????? BSD/OS ???????????????????????????????????????????????????????????????????????????????????????
- MSG_TRUNC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? iov_len ??????????????????
- MSG_CTRUNC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????msg_controllen??????
- MSG_EOR?????????????????????????????????????????????????????????????????????TCP ?????????????????????????????????????????????????????????
- MSG_OOB????????????????????? TCP ??????????????????????????????????????????????????? OSI ???????????????
- MSG_NOTIFICATION??????????????? SCTP ???????????????????????????????????????????????????????????????????????????????????????
????????????????????? msghdr ???????????????????????????????????????????????????????????????????????? UDP ??????????????? recvmsg???
?????????????????????????????? 16 ???????????????????????????????????? 20 ???????????????????????????????????????????????? 3 ??? iovec ????????????????????????????????????????????? 100 ?????????????????????????????????????????? 60 ?????????????????????????????????????????? 80 ????????????????????????????????????????????????????????? IP_RECVDSTADDR ???????????????????????????????????? UDP ?????????????????? IP ?????????
????????? 198.38.100:2000 ???????????? 170 ????????? UDP ??????????????????????????????????????? UDP ?????????????????? IP ????????? 206.168.112.96.??????????????? recvmsg ????????? msghdr ???????????????????????????
????????? recvmsg ????????????????????????????????????????????????????????????????????????????????????????????????
- ??? msg_name ????????????????????????????????????????????????????????????????????????????????????????????????????????? IP ???????????? UPD ????????????
- msg_namelen ??????????????????-???????????????????????????????????? msg_name ??????????????????????????????????????????????????????????????? recvmsg ????????????????????????????????? 16.
- ???????????????????????? 100 ???????????????????????????????????????????????? 60 ????????????????????????????????????????????? 10 ????????????????????????????????????????????????????????????????????? 70 ?????????????????????recvmsg ???????????????????????? 170?????????????????????????????????
- ??? msg_control ??????????????????????????????????????? cmsghdr ???????????? cmsghdr ????????????cmsg_len ???????????? 16???cmsg_level ???????????? IPPROTO_IP???cmsg_type ???????????? IP_RECVDSTADDR????????? 4 ???????????????????????? UDP ?????????????????? IP ??????????????? 20 ????????????????????? 4 ????????????????????????
- msg_controllen ????????????????????????????????????????????????????????????????????????????????????-???????????????recvmsg ????????????????????? 16???
- msg_flags ??????????????? recvmsg ?????????????????????????????????????????????
以上是关于Linux?????????recvmsg???sendmsg??????的主要内容,如果未能解决你的问题,请参考以下文章