net_uv: fix test-net-eaddrinuse.js

This commit is contained in:
Henry Rawas 2011-07-06 17:13:17 -07:00 коммит произвёл Ryan Dahl
Родитель b6f6a1ca11
Коммит 3c52fd006e
1 изменённых файлов: 28 добавлений и 10 удалений

Просмотреть файл

@ -450,10 +450,7 @@ function Server(/* [ options, ] listener */) {
this.connections = 0;
this.allowHalfOpen = options.allowHalfOpen || false;
this._handle = new TCP();
this._handle.socket = this;
this._handle.onconnection = onconnection;
this._handle = null;
}
util.inherits(Server, events.EventEmitter);
exports.Server = Server;
@ -465,6 +462,11 @@ function toPort(x) { return (x = Number(x)) >= 0 ? x : false; }
function listenip(self, ip, port, addressType) {
var r = 0;
// assign handle in listen, and clean up if bind or listen fails
self._handle = new TCP();
self._handle.socket = this;
self._handle.onconnection = onconnection;
if (ip && port) {
debug("bind to " + ip);
if (addressType == 6) {
@ -473,14 +475,27 @@ function listenip(self, ip, port, addressType) {
r = self._handle.bind(ip, port);
}
}
if (r) {
self.emit('error', errnoException(errno, 'listen'));
} else {
self._handle.listen(self._backlog || 128);
self._handle.close();
self._handle = null;
process.nextTick(function() {
self.emit('listening');
self.emit('error', errnoException(errno, 'listen'));
});
} else {
r = self._handle.listen(self._backlog || 128);
if (r) {
self._handle.close();
self._handle = null;
process.nextTick(function() {
self.emit('error', errnoException(errno, 'listen'));
});
} else {
process.nextTick(function() {
self.emit('listening');
});
}
}
}
@ -539,7 +554,10 @@ function onconnection(clientHandle) {
Server.prototype.close = function() {
this._handle.close();
if (this._handle != null) {
this._handle.close();
this._handle = null;
}
};