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

Paz*_*Paz 6 c sockets client wait server

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

//client side
bytesNumInput = read(inputFileFD,bufInput,BUFFER_SIZE)
bytesSend = write(sockfd,bufInput,bytesNumInput)
Run Code Online (Sandbox Code Playgroud)

当然服务器也处于循环中。

//server side
bytesRecv = read(sockfd,bufOutput,bytesNumInput)
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是:

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

use*_*421 9

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

不会。EOF 表示对等方已断开连接。如果连接仍处于活动状态,read()则将阻塞,直到 (a) 至少传输一个字节、(b) 发生 EOF 或 (c) 发生错误。

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

参见上文(a)。

服务器是否有可能在 1 次写入迭代中处理 2 次读取?

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


Jea*_*nès 5

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