Web服务器技术:从缓冲区溢出到交互式显示的全面解析
1. 缓冲区溢出问题及解决方案
在处理大量HTML装饰或包含众多文件的目录时,可能会遇到目录显示截断的问题。这是因为 http_get() 函数一次性生成完整目录并将结果存储在默认仅2KB的传输缓冲区中。若实际文档长度超过此限制,末尾部分将被无声截断。
1.1 简单解决方案
最简单的解决办法是通过重新定义 _CBUFFLEN_ 来增加缓冲区大小。但从更广泛的角度看,开发一个通用解决方案以适应未来任意复杂度的HTML显示会更好。
1.2 借鉴大文件传输方法
可以借鉴处理TCP连接上大文件传输的方式。 http_data() 函数会持续检查缓冲区的空闲空间,当有空间时加载下一个文件片段。当所有文件都在缓冲区(但不一定已发送)时,启动TCP连接的关闭操作。示例代码如下:
if (adp->in && (len = buff_freelen(&ts->txb)) > 0)
{
if ((len = buff_infile(&ts->txb, adp->in, (WORD)len)) == 0)
{
fclose(adp->in);
adp->in = 0;
close_tcp(ts);
}
}
1.3 状态机实现
可以逐段生
超级会员免费看
订阅专栏 解锁全文
2408

被折叠的 条评论
为什么被折叠?



