我想在特定的时间间隔后写入一些数据在套接字。我有两个线程,一个线程维护TCP连接,另一个线程生成数据。写入到客户端时返回EWOULDBLOCK当服务器很慢
生成therad的数据生成数据,并将其写入共享内存。服务器线程从共享内存读取数据,并将其发送到客户端。
但是,当数据生成线程变慢时,当涉及大量计算时,服务器线程在尝试写入客户端时会收到EWOULDBLOCK错误。但令人惊讶的是,从客户端来看,没有这样的错误。
如果我没有错,当服务器速度比客户端快,并且在再次写入套接字缓冲区之前没有完全读取套接字缓冲区时,会返回EWOULDBLOCK错误。但是,这里的情况完全相反。
难道是因为服务器Therad一直处于睡眠状态直到数据生成线程完成(数据线程具有更高的优先级)。
有人可以解释可能发生的事情吗?
嗨杰里米,非常感谢..我会尝试读取共享内存中的数据量,看看是否真的是这个问题.. – Hariprasad 2013-04-29 15:54:50
优秀的解释,非常感谢。 – 2017-06-15 03:57:50