FGR*_*eau 5 sockets tcp node.js
为了理解什么是TCP keepalive(我们将调用keepalive),你只需要读取名称:保持TCP活着.这意味着您将能够检查连接的套接字(也称为TCP套接字),并确定连接是否仍在运行或是否已断开.
那么,为什么以下代码在互联网连接断开时不会抛出某些东西?
var tls = require('tls');
var socket = tls.connect(443, "google.com", function connected() {
console.log('connected');
});
socket.setNoDelay(true);
socket.setKeepAlive(true, 0);
socket.setTimeout(0, function(){
console.log('timeout');
});
socket.on('data', function(data) {
console.log(data);
});
socket.on('close', function() {
console.error("close");
});
socket.on('error', function(err) {
console.error("error", err);
});
Run Code Online (Sandbox Code Playgroud)
使用NodeJS v0.10.17在MacOS/Debian上测试
引用男人7 tcp:
tcp_keepalive_time(整数;默认值:7200;自Linux 2.2起)
TCP开始发送保持活动探测之前连接需要空闲的秒数.只有在启用SO_KEEPALIVE套接字选项时才会发送保持活动.默认值为7200秒(2小时).在启用保持活动后大约额外的11分钟(9个探测间隔75秒间隔)后,空闲连接终止.
所以大约10分钟后(在MacOS 10.8上)节点发出错误:
error { [Error: read ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'read' }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6689 次 |
| 最近记录: |