正如你所知道SENDMSG有这样的声明:sendmsg如何工作?
int sendmsg(int s, const struct msghdr *msg, int flags);
和指向msghdr结构有以下形式:
struct msghdr {
void * msg_name; /* optional address */
socklen_t msg_namelen; /* size of address */
struct iovec * msg_iov; /* scatter/gather array */
size_t msg_iovlen; /* # elements in msg_iov */
void * msg_control; /* ancillary data, see below */
socklen_t msg_controllen; /* ancillary data buffer len */
int msg_flags; /* flags on received message */
};
正如你看到的指向msghdr具有缓冲的数组,iovec结构,具有缓冲区计数msg_iovlen。我想知道sendmsg如何发送这些缓冲区。它连接所有缓冲区并发送或发送for循环吗?
只是一个说明:如果这是好奇心,然后很酷。如果你正在尝试写出一些依赖于这些知识的东西,那么你几乎肯定会做错了,并且会出现问题。 – 2010-11-23 17:37:07
@SanJacinto对你来说阐述**为什么**写出一些依赖于这些知识的东西需要麻烦。你能详细说明吗? – 2012-07-09 01:55:09
@lori因为文档为您提供了一组代码界面,并告诉您对它们有什么期望。界面变化非常缓慢。底层代码没有这样的保证。如果你在搜集关于内部的知识,并围绕这些知识编写代码,那么如果你更新内核或网络堆栈中的某个驱动程序,并且调用它的代码不再工作,则不应该感到惊讶。如果你这样做,你做出了不好的选择。 – 2012-07-09 11:07:20