我一直在阅读手册页(2),根据手册页,read(2)的返回值为-1,错误时EOF为0,读取的字节数> 0。
如何判断客户端写入(2)何时完成?
我问,因为我正在编写一个服务器和一个客户端来testing它,但是当我第一次读(2)并循环查看更多时,读取(2)块并等待客户端的另一个写入(2) (这是不是因为我的客户端只有一个写(2))。
如果我只是想念一些简单的东西,有人可能会指出或指出我很好的参考?
客户端在完成时需要关闭套接字。 一旦客户端关闭套接字,服务器将收到EOF消息。 如果客户端打开套接字但从不写入,服务器将永远等待另一条消息下来。
read返回时,你知道你已经完成了:
读写之间没有对应关系。 单个客户端写入可能需要10次读取才能完全加载。 除非您在内容中添加分隔符,否则无法知道结束位置,除非套接字已关闭。
如果您仍然需要向客户端发送响应,则可以关闭客户端上的套接字:
shutdown(socket, SHUT_WR);
这将导致服务器上的读取返回0。
有些东西要看是使用select()首先检查数据,并指定一个合适的超时期限,而不是盲目地调用read() 。 这将允许您的服务器在一段时间不活动之后关闭套接字,并释放可能使用的任何资源等。