从套接字读取是等待还是获得EOF?

时间:2017-02-12 13:29:10

标签: c sockets server client wait

我正在C中实现客户端和服务器之间的简单连接。 在客户端,我正在循环,从文件中读取;每次BUFFER_SIZE字节并将其发送到服务器端(没有上传错误处理)。

//client side
bytesNumInput = read(inputFileFD,bufInput,BUFFER_SIZE)
bytesSend = write(sockfd,bufInput,bytesNumInput)

当然服务器也在循环中。

//server side
bytesRecv = read(sockfd,bufOutput,bytesNumInput)

现在,我的问题是:

  1. 如果服务器读取速度比客户端快,我可以在连接中间获得EOF吗?
  2. 读取函数是等待获取所有数据还是与从文件读取相同?
  3. 服务器是否有可能在1次写入迭代中处理2次读取迭代?

2 个答案:

答案 0 :(得分:2)

  1. 不,服务器将等待传入的数据。套接字提供控制流程。
  2. 问题不清楚,读取总是尝试获取所有请求的数据,但如果没有那么多,那么它将获得可用的内容
  3. 是的,socket没有消息的语义,只是一个字节流。

答案 1 :(得分:1)

  

如果服务器读取速度快于客户端,我可以在连接中间获得EOF吗?

没有。 EOF表示对等方已断开连接。如果连接仍然存在,read()将阻塞,直到(a)传输至少一个字节,(b)发生EOF,或(c)发生错误。

  

read函数是等待获取所有数据还是与从文件读取相同?

见上文(a)。

  

服务器是否可以处理2次读入1次写入迭代?

是。 TCP是字节流协议,而不是消息传递协议。