我有一个客户端 TCP 套接字,它每五秒写入几个字节,服务器立即回显这些字节。
Connect()和write()工作得很好,我在 IP 层有一个回调,通知我服务器的回声。这在发送之间可靠地发生。
但我无法从套接字读取回声。
我尝试使用select()来通知我传入的回声。奇怪的是,我的回调直到我关闭套接字才被调用,此时它被连续调用。然而,对于这些调用中的每一个,read()返回 -1/WOULD_BLOCK。
当 IP 层通知我传入数据时,我的第二种方法异步调用read() 。同样,read()只返回 -1/WOULD_BLOCK。我意识到read()可以将数据传输到套接字层,但希望它只是意味着在下一次写入后读取更多内容。
我倾向于认为我在某种程度上滥用了 API,因为我是一个 IP/sockets 菜鸟,并且选择方法表现得如此奇怪。
这不太可能是一个愚蠢的错误,因为几乎相同的代码路径非常适合 UDP 模式。唯一的区别:对于 UDP,我使用 DATAGRAM 模式、sendto() 和 recvfrom()。对于 TCP,我使用 STREAM 模式、write() 和 read()。