对于不耐烦:
如何改变的价值/proc/sys/net/ipv4/tcp_retries2
在Linux中单个连接,使用setsockopt()
,ioctl()
或者这样,或者是这可能吗?
更长的解密:
我正在开发一个使用长轮询HTTP请求的应用程序.在服务器端,需要知道客户端何时关闭连接.准确性并不重要,但肯定不能是15分钟.接近一分钟就可以了.
对于不熟悉该概念的人,长轮询HTTP请求的工作方式如下:
在我的应用程序中,服务器每隔一段时间就向客户端发送"心跳"(默认为30秒).心跳只是一个作为响应块发送的换行符.这是为了保持线路忙,以便我们通知连接丢失.
客户端正常关闭时没有问题.但是当它强制关闭时(例如客户端机器断电),不会发送TCP重置.在这种情况下,服务器发送心跳,客户端不会发送确认.在此之后,服务器在放弃并向应用层(我们的HTTP服务器)报告失败后,继续重传该数据包大约15分钟.在我的情况下等待15分钟太久了.
我可以通过写入以下文件来控制重传时间/proc/sys/net/ipv4/
:
tcp_retries1 - INTEGER
This value influences the time, after which TCP decides, that
something is wrong due to unacknowledged RTO retransmissions,
and reports this suspicion to the network layer.
See tcp_retries2 for more details.
RFC 1122 recommends at least 3 retransmissions, which is the
default.
tcp_retries2 - INTEGER
This value influences the timeout of an alive TCP connection,
when RTO retransmissions …
Run Code Online (Sandbox Code Playgroud) 这是我的测试代码:
errno = 0;
d = strtod("1.8011670033376514e-308", NULL);
Run Code Online (Sandbox Code Playgroud)
有了这个代码,我得到d == 1.8011670033376514e-308
和errno == ERANGE
.
来自strtod(3):
如果正确的值会导致溢出,则返回加号或减号
HUGE_VAL
(HUGE_VALF
,HUGE_VALL
)(根据值的符号),并ERANGE
存储errno
.如果正确的值会导致下溢,则返回零并ERANGE
存储errno
.
因此,在我看来,要么errno
应该为零(无错误),要么d
应为零(下溢).
这是一个错误,还是我错过了什么?对于许多不同版本的eglibc和gcc,会发生这种情况.
我使用静态网站生成器,在每次运行时生成网站中的所有文件.生成文件后,我使用rsync来复制内容.
为了实现更好的缓存,我希望rsync不要修改目标中未更改的那些文件的时间戳.可能吗?
编辑:为了清楚说明,所有源文件的时间戳总是比目标文件的时间戳更新.
我喜欢 emacsclient。它允许我使用单个 Emacs 框架进行所有编辑,甚至当程序想要打开编辑器(即export EDITOR=emacsclient
)时也是如此。
我也想让它在虚拟机上也能这样工作。我可以在我的单帧设置中使用 Tramp 来使用 Emacs 来编辑远程文件,它工作得很好,但还不够。当我调用git commit
or时sudoedit
,我将不得不使用恰好安装在远程计算机上的蹩脚的基于终端的编辑器。
那么,有没有像 emacsclient 这样可以跨多台机器工作的东西呢?