【发布时间】:2018-07-24 15:35:44
【问题描述】:
我正在编写一个 C/S 程序,客户端和服务器都可以在任意时间向对等方发送数据(没有明确的确认)。我想知道如果客户端和服务器巧合地同时写入对等方是否可能会死锁。
那么从write() 返回是否意味着对等应用程序已经拥有read() 数据?或者它仅仅意味着对等体的内核已经获得了数据并且将在下一个read()传递给应用程序?
(EJP 的回答修正了我对 write()/send()/... 的完全错误理解。为了添加一些权威信息,我在 POSIX 标准中发现了这个关于 send 的信息:
成功完成对 send() 的调用并不能保证消息的传递。返回值 -1 表示仅本地检测到的错误。
Linux 的关于send() 的手册页不是很清楚:
在 send() 中没有隐含发送失败的指示。本地检测到的错误由返回值 -1 指示。
或者是因为作为非英语母语人士,我无法完全理解第一句话。 )
【问题讨论】:
标签: c sockets tcp network-programming