在一个1000次的循环中构造socket连接到同一端口报以下错误: Error: connect EMFILE
发布于 13 年前 作者 zenwong 8946 次浏览 最后一次编辑是 8 年前
events.js:48
    throw arguments[1]; // Unhandled 'error' event
		^
Error: connect EMFILE
    at errnoException (net.js:670:11)
    at connect (net.js:548:19)
    at Socket.connect (net.js:613:5)
    at Object.<anonymous> (/Users/zen/Documents/work/game.js:10:5)
    at Module._compile (module.js:446:26)
    at Object..js (module.js:464:10)
    at Module.load (module.js:353:31)
    at Function._load (module.js:311:12)
    at Array.<anonymous> (module.js:484:10)
    at EventEmitter._tickCallback (node.js:190:38)

在一个1000次的循环里构造并且连接到1234端口的socket报这个错误,这个错误是linux系统错误:“打开了过多文件”。

想问大家有遇到这个问题吗?

是不是和linux的任何都是文件的概念有关?

5 回复
var count = 0;

for(var i =0; i<1000;i++){
	var ss = require('net').Socket({fd:null,type:'tcp4',allowHalfOpen:false});
	ss.connect(1234,function(){
		count++;
		console.log(count);
	});
}

首先,谢谢你。

以上为我的完整代码,我已在生成时将fd设置为null,并且只有connect没有write,这样就不会生成文件描述符了吧。但依然报错。

@zenwong Linux有默认限制socket的个数,1000个已经超过那个数目了。 我在Mac OS X下面打开500个都有这个提示。 可以google一下提高socket限制数目的方法。

@PittMak 我在Linux下的Socket连接数限制已经设为3万多了,但是还是报这个错误

看来我那个redis客户端的问题和这个差不多,应该是同一个 这么大的坑,怎么用啊

回到顶部