EADDRINUSE 错误,如果我强制终止进程然后尝试重新启动它
EADDRINUSE error if I force kill the process and then try to re-launch it
var arDrone = require('ar-drone');
var PaVEParser = require('./PaVEParser');
var output = require('fs').createWriteStream('./vid.h264');
var client;
var mostRecentFrame;
var frameCounter = 0;
const net = require('net');
const server = net.createServer((c) => {
// 'connection' listener
console.log('client connected');
c.on('end', () => {
console.log('client disconnected');
});
c.on('data', (data) => {
c.write(mostRecentFrame);
});
});
server.on('error', (err) => {
throw err;
});
server.listen('/tmp/ard.sock', () => {
console.log('server bound');
});
process.stdin.on('data', function() {
console.log("Ending the program, landing the drone and terminating the connection.");
server.close();
process.exit();
});
当我强制终止这个程序时,我无法重新启动它。
daniel@beepboop:~/AR-drone Project$ node test-save-pngs-no-flight.js
/home/daniel/AR-drone Project/test-save-pngs-no-flight.js:24
throw err;
^
Error: listen EADDRINUSE /tmp/ard.sock
at Object.exports._errnoException (util.js:1036:11)
at exports._exceptionWithHostPort (util.js:1059:20)
at Server._listen2 (net.js:1239:19)
at listen (net.js:1288:10)
at Server.listen (net.js:1377:5)
at Object.<anonymous> (/home/daniel/AR-drone Project/test-save-pngs-no-flight.js:26:8)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
我认为这是因为套接字没有正确关闭。
- 当我强行杀死套接字时,如何让程序关闭套接字,并且
- 之后如何从命令行手动关闭套接字?
编辑:
我正在使用 Ubuntu 16.04。强行杀死,我的意思是我在运行时击中了 "control-C"。
是的,这就是它的工作原理。这是一个较短的重现示例:
var net = require('net');
const server = net.createServer((c) => {
});
server.on('error', (err) => {
throw err;
});
server.listen('/tmp/x.sock', () => {
console.log('server bound');
});
您可以通过 运行:
来避免这个问题
server.close();
程序退出前
在您的情况下,您可以通过处理 SIGINT 来避免该问题:
var net = require('net');
const server = net.createServer((c) => {
});
server.on('error', (err) => {
throw err;
});
server.listen('/tmp/x.sock', () => {
console.log('server bound');
});
process.on('SIGINT', () => {
server.close();
process.exit();
});
另请参阅:
var arDrone = require('ar-drone');
var PaVEParser = require('./PaVEParser');
var output = require('fs').createWriteStream('./vid.h264');
var client;
var mostRecentFrame;
var frameCounter = 0;
const net = require('net');
const server = net.createServer((c) => {
// 'connection' listener
console.log('client connected');
c.on('end', () => {
console.log('client disconnected');
});
c.on('data', (data) => {
c.write(mostRecentFrame);
});
});
server.on('error', (err) => {
throw err;
});
server.listen('/tmp/ard.sock', () => {
console.log('server bound');
});
process.stdin.on('data', function() {
console.log("Ending the program, landing the drone and terminating the connection.");
server.close();
process.exit();
});
当我强制终止这个程序时,我无法重新启动它。
daniel@beepboop:~/AR-drone Project$ node test-save-pngs-no-flight.js
/home/daniel/AR-drone Project/test-save-pngs-no-flight.js:24
throw err;
^
Error: listen EADDRINUSE /tmp/ard.sock
at Object.exports._errnoException (util.js:1036:11)
at exports._exceptionWithHostPort (util.js:1059:20)
at Server._listen2 (net.js:1239:19)
at listen (net.js:1288:10)
at Server.listen (net.js:1377:5)
at Object.<anonymous> (/home/daniel/AR-drone Project/test-save-pngs-no-flight.js:26:8)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
我认为这是因为套接字没有正确关闭。
- 当我强行杀死套接字时,如何让程序关闭套接字,并且
- 之后如何从命令行手动关闭套接字?
编辑:
我正在使用 Ubuntu 16.04。强行杀死,我的意思是我在运行时击中了 "control-C"。
是的,这就是它的工作原理。这是一个较短的重现示例:
var net = require('net');
const server = net.createServer((c) => {
});
server.on('error', (err) => {
throw err;
});
server.listen('/tmp/x.sock', () => {
console.log('server bound');
});
您可以通过 运行:
来避免这个问题server.close();
程序退出前
在您的情况下,您可以通过处理 SIGINT 来避免该问题:
var net = require('net');
const server = net.createServer((c) => {
});
server.on('error', (err) => {
throw err;
});
server.listen('/tmp/x.sock', () => {
console.log('server bound');
});
process.on('SIGINT', () => {
server.close();
process.exit();
});
另请参阅: