通过 Unix 域套接字发送结构

Posted

技术标签:

【中文标题】通过 Unix 域套接字发送结构【英文标题】:Sending structs through Unix domain sockets 【发布时间】:2010-09-13 22:18:58 【问题描述】:

我正在使用 Unix 域套接字在 Linux 中进行一些进程间通信。连接后,客户端使用 send 向服务器发送一个结构。此结构包含有关客户端的一些信息,包括末尾的标识符字符串。服务器接收刚刚找到的信息并将另一个结构发回。客户端使用 recv 阻塞,但永远不会得到任何东西。服务器完成 send 调用,没有任何错误并继续前进。

我在这里缺少一些基本的东西吗?当我通过套接字发送字符串时,双方发送和接收都很好。数据是否必须有一个终止 NULL?好像不太对……

【问题讨论】:

套接字是数据报模式还是流模式? 它们处于流模式。 您的问题暗示这只发生在结构上。整数或字符都可以正常工作吗? 这听起来像是在手册页中解释的相关函数调用之一。并不是说这对 SO 来说是个坏问题,我只是建议您在等待答案时仔细查看文档。 您所描述的应该可以正常工作。也许尝试将问题隔离为一个小代码示例? 【参考方案1】:

当我第二天进来时,我无法再次重现错误。

【讨论】:

【参考方案2】:

尝试刷新服务器上的套接字。

【讨论】:

除了 close 之外我没有看到任何可以刷新套接字的东西。 尝试将send()函数的flags参数设置为MSG_EOR

以上是关于通过 Unix 域套接字发送结构的主要内容,如果未能解决你的问题,请参考以下文章

go语言unix域套接字发送udp报文

Beats:将 Unix 域套接字中的数据索引到 Elastic Stack

Beats:将 Unix 域套接字中的数据索引到 Elastic Stack

unix进程间通信方式(下)-unix域套接字(转)

PHP to Go 使用 Unix 域套接字

nginx 将数据不完整地传输到 unix 域套接字