从套接字C HTTP读取

我想知道如何判断是否已从套接字接收到所有数据。 这是一个简单的Web代理,现在我正在处理请求部分,所以发送的内容应该以’\ r \ n \ n \ n \ n’终止。我不知道请求会有多长。 我在这里读了一些post说我应该检查读取函数返回的0? 但其他说0的人只有在客户关闭连接时才会返回? 否则我可以检查缓冲区的最后一个字符,看看它们是否与上面的字符匹配?

计划只是将读取的数据加载到缓冲区中,如果有更多的数据重复,则保存该数据。

谢谢

HTTP不是一个简单的协议,需要几个RFC。 只是匹配双线换行/换行不行。 至少,您必须解析请求标头以确定哪些编码,然后,可选地,通过请求正文。

查看libcurl或任何可用的开源Web服务器以了解复杂性。

我认为你的计划几乎是正确的。 您需要继续将读取数据加载到缓冲区中,直到找到所需的模式'\r\n\r\n' ,然后您知道您有完整的请求并可以将其传递给您的处理逻辑,从中删除请求缓冲并重复。

这取决于您是在阻塞还是非阻塞套接字上。

  • 如果您使用的是非阻塞套接字,则它可以返回0并将errno设置为EAGAIN。 这只是意味着你必须等待再次尝试阅读
  • 如果您在阻塞套接字上,0将指示文件结束