在unix系统上使用TCP套接字,python似乎完全忽略了我的ancbufsize。
data, ancdata, msg_flags, address = sock.recvmsg(1, socket.CMSG_LEN(4))
摘自recvmsg的Linux手册页:
size_t msg_controllen; /* ancillary data buffer len */
如果我跟踪我的程序,我会看到 msg_controllen 为 0,我似乎无法做任何事情来让它具有非零值。我还需要安装其他软件包吗?运行漂亮的centos7
这是我的 strace 输出中的 recvmsg 调用:
recvmsg(3, {msg_name(0)=0x7ffcc97e2c90, msg_iov(1)=[{"\360", 1}], msg_controllen=0, msg_flags=0}, 0) = 1
这仅返回 msg_iov,并且没有辅助数据,大概是因为 msg_controllen 为 0。
以上返回“360”
最佳答案
How does ancillary data in sendmsg() work?
我认为辅助数据永远不会通过 TCP 套接字发送,令人沮丧的是,许多文档中都没有列出这一点,包括 python 套接字文档、c 消息文档,甚至 APUE 书籍
关于python - socket.recvmsg 忽略 ancbufsize、辅助数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56366611/