- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
您好,我正在编写一个简单的 http 端口转发器。我从端口 80 读取数据,并将数据传递到端口 8080 上的我的 lighttpd 服务器。
只要我在端口 8080 上的套接字上 write() 数据(转发请求)就没有问题,但是当我从那个套接字中读取()数据(转发响应)时,最后一个 read() 挂了很多(大约 1 或 2 秒),然后才意识到没有更多数据并返回 0。
我尝试将套接字设置为非阻塞,但这不起作用,因为有时它会返回 EWOULDBLOCKING,即使还有一些数据剩余(lighttpd + cgi 可能非常慢)。我尝试使用 select() 设置超时,但是,如上所述,当实际上有一些数据要传输时,慢速 cgi 可能会使套接字超时。
更新:已解决。毕竟是保活。在我的 lighttpd 配置文件中禁用它之后,整个事情运行完美。
最佳答案
好吧,为了完成,按照我的评论:
很可能是 HTTP 服务器本身(在您的情况下是 lighttpd)正在维护与您的代理的持久连接,因为您的代理中继了一个包含“Connection: keep-alive
”的 header 。当客户端想要通过同一连接发出多个请求时,此 header 会有所帮助。因此,因为 lighttpd 收到了这个 header ,它假设它会收到更多请求并保持套接字打开,导致 read
在您的代理中阻塞。
在你的 lighttpd 配置中禁用 keep-alive 是修复它的一种方法,但你也可以在将它中继到你的 web 服务器之前从 header 中删除“Connection: keep-alive
” .
关于c - 没有数据读取时socket read()会挂一会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2896698/
我在从 python 调用共享 c 库时遇到问题。库加载正常,公开的 3 个函数之一是可调用的,并且按预期工作;但是,当向库中添加另一个函数时,我发现其他两个不起作用。发生的事情是 python 卡在
我在使用 ImageIcon().GetImage() 时遇到问题 奇怪的是,它有时可以工作并向我显示带有 map 的窗口,而有时却不能。它也可以在其他计算机上完美运行,但不能在我的计算机上运行! 我
我们有时会遇到一个问题,即我们在 IIS 中有许多具有以下状态的请求:RequestAcquireState。 我们正在使用 SqlSessionStateStore 来管理 session 。当我们
我有一个 MobileSubstrate 插件,可以挂接跳板(不在实际的 objective-c 代码中,而是在 plist 中)。它包含一个 UIWebView,它加载一个 NSURLRequest
我正在尝试使用 Django 1.7,并按照说明进行操作 here .不幸的是,该过程似乎因以下输出而挂起: [Watt] ~/Projects/proj/proj master > python p
我正在使用 HDP 2.3.0.0-2557,我正在尝试运行如下所示的配置单元查询: beeline> !connect jdbc:hive2://localhost:10000 Connecting
我正在尝试使用 mxnet 设置 AWS Greengrass,以便在 Raspberry Pi 上进行机器学习。 当从 https://docs.aws.amazon.com/greengrass/
我是一名优秀的程序员,十分优秀!