我有一个客户端TCP套接字,每5秒钟写入几个字节,服务器回应字节回来。Tcp套接字读取总是阻止
连接()和写()工作蛮好的,我有通知我服务器的回声的IP层的回调。这在发送之间可靠地发生。
但我无法从套接字读取回显。
我试过用select()来通知我传入的回声。奇怪的是,我的回调没有被调用,直到我关闭套接字,此时它被连续调用。然而,对于这些呼叫中的每一个,read()返回-1/WOULD_BLOCK。
当IP层通知我传入数据时,我的第二种方法异步地调用()。同样,read()只返回-1/WOULD_BLOCK。我知道read()可能将数据击败到套接字层,但是希望在下一次写入之后它可能意味着更多的读取。
我倾向于认为我在某种程度上滥用了API,因为我是IP /套接字noob,而且select方法表现得如此奇怪。
这是不可能的愚蠢的错误,因为几乎相同的代码路径完美的UDP模式。唯一的区别是:对于UDP,我使用DATAGRAM模式sendto()和recvfrom()。对于TCP,我使用STREAM模式,write()和read()。
当你调用read()时,你提供的count值是多少? – TJD
请显示您的实际阅读代码。你明显使用API错误。我的猜测是你滥用'SOCKET'手柄。 –
@TJD:'count'表示字节数?我分配并要求高达4k。相同的代码适用于UDP recv(),当然,对于UDP,我传递其他fromaddr参数。 –