在一个1000次的循环中构造socket连接到同一端口报以下错误:
Error: connect EMFILE
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 3q
@PittMak 我在Linux下的Socket连接数限制已经设为3万多了,但是还是报这个错误
看来我那个redis客户端的问题和这个差不多,应该是同一个 这么大的坑,怎么用啊