【发布时间】:2018-09-13 14:41:18
【问题描述】:
我使用 cmsg 在 linux socket tx 上激活时间戳。
ssize_t sendWithOptions
(int sd, std::vector<uint8_t> &payload, uint32_t destIP, int flags)
{
msghdr msg { };
.... // filling standard
std::array<uint8_t, CMSG_LEN(sizeof(__u32))> buf;
msg.msg_control = buf.data();
msg.msg_controlen = buf.size();
auto cmsg { CMSG_FIRSTHDR ( &msg ) };
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SO_TIMESTAMPING;
cmsg->cmsg_len = buf.size();
*(reinterpret_cast<__u32>(CMSG_DATA (cmsg)) = static_cast<__u32>(flags);
return sendmsg ( sd, &msg, MSG_DONTWAIT );
}
离开函数,“buf”会被自动销毁,但是sendmsg是否需要这个缓冲区才能活得更久? 我是否可以保证该函数在返回发送的字节数后不需要此缓冲区。
【问题讨论】: