CRLF 导致来自套接字的 read() 返回

问题描述

我正在用 C++ 编写一个 HTTP 服务器,使用 TCP 套接字在客户端和服务器之间进行通信。

在使用 Linux 终端向服务器发送请求时,我注意到每次按 Enter 时,服务器上的 read() 都会返回(它读取到 {{1} } 并返回)。

这种行为“正常”吗?我没有在任何地方找到它。

编辑:我使用 telnet 作为客户端和阻塞读取/接收

解决方法

只要有数据可用,就会返回阻塞的 readrecv。如果您在在终端上用作客户端的任何内容(即 netcat、telnet 或类似的)上输入 Enter,它很可能(取决于实际客户端)直接发送此 \r\n到服务器,它将导致立即成功返回 read/recv