我不是 C 编程方面的专家,但我正在尝试使用 sendmsg() 和 recvmsg() 编写一个相当简单的程序,以便在客户端和服务器之间发送消息(两者都在同一台机器上,所以基本上我'正在向本地主机发送消息)。
在初始化所需的结构(如在 iovec 和 msghdr 中)并成功将客户端连接到服务器后,我的 sendmsg() 调用失败并出现“没有可用的缓冲区空间”错误。
这是 linux man 报告的有关此类错误的内容:
网络接口的输出队列已满。这一般表示接口已经停止发送,但可能是暂时拥塞造成的。(通常,这在 Linux 中不会发生。当设备队列溢出时,数据包会被静默丢弃。)
我在互联网上四处寻找,结果发现 sendmsg() 没有被广泛使用,没有人能与这种类型的错误联系起来。我发现的唯一有用的建议是检查可能过多的打开套接字,但我总是关闭我创建的每个套接字。
所以我被困住了,基本上是因为我是个菜鸟,我不知道该去哪里解决这类问题。
如果有人知道如何进行,那就太好了。(请不要告诉我不要使用 sendmsg(),因为我工作的全部目的是理解这个系统调用,而不是向自己发送消息)
这是迄今为止我在 pastebin 上编写的代码:客户端和服务器
- 解决了 -
非常感谢你。我已经能够解决这个问题并修复了我犯的其他错误,所以这里是 sendmsg() 和 recvmsg() 工作消息传递的功能代码:客户端和服务器