我已经编写了一个基于 Webdis 的简单 HTTP 服务器。现在我遇到了一个问题,当客户端发送 HTTP 请求而没有接收响应(AKA,只发送,不接收来自服务器的响应)时,服务器将收到多个 HTTP 请求,这将导致解析模块失败(可能这是解析模块中的错误)。如果有任何模糊,来我的一些代码:
/* client... */
int fd = connect_server();
while (1) {
send(fd, buf, sz);
continue; /* no receive.. */
}
/* server... */
/* some event trigger following code */
char buffer[4096]; /* a stack based receive buffer, buggy */
ret = recv(fd, buffer, sizeof(buffer));
而客户端在服务器休眠期间发送 10 个 HTTP 请求(小于 4096 字节)(用于调试),下一次接收将接收 10 个请求,但解析器无法解析多个请求,这使得所有这些请求都失败。如果所有这些请求都大于 4096,这将切断其中一个并且仍然失败。
我浏览了Nginx源代码,可能是回调设计的(不是怪罪),我还没有得到它的解决方案......
有没有办法做以下事情:
如何控制recv
一次只收到一个请求的呼叫?或者是否有一些与 TCP 相关的机制可以只接收一个send
请求?