我正在使用select()和非阻塞套接字在C上编写一个小型HTTP服务器,但我发现自己遇到了问题。
当我接受连接并尝试使用带有1024个长度缓冲区的recv()函数读取HTTP请求(来自浏览器,即:Mozilla Firefox)。我得到了整个请求就好了。但是一般来说,我不知道recv()是否给了我整个请求或它的一部分,这意味着我不知道我是否应该继续阅读或将HTTP响应发送回客户端(BROWSER)。会发生什么如下:
我的问题是,如何处理这种情况:
如果recv()函数只读取请求的一部分,或者仅当它已到达请求的末尾并且没有其他内容被读取时,是否将错误设置为EAGAIN / EWOULDBLOCK? 如何处理?
提前谢谢你 PS:我希望我已经解释得很好,所以你可以理解并试图帮助我。
答案 0 :(得分:1)
如果recv()函数只读取请求的一部分,或者仅当它已到达请求的末尾并且没有其他内容被读取时,是否将错误设置为EAGAIN / EWOULDBLOCK?如何处理?
都不是。如果没有更多数据可以立即读取,它将被设置为该值。 recv()
不知道来自三垒的HTTP请求格式。
您需要熟悉RFC 2616和朋友来实现HTTP,特别是有关内容长度和分块编码的部分。你不能没有它。