Browse Source

net_uv: fix test-net-eaddrinuse.js

v0.7.4-release
Henry Rawas 14 years ago
committed by Ryan Dahl
parent
commit
3c52fd006e
  1. 38
      lib/net_uv.js

38
lib/net_uv.js

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

Loading…
Cancel
Save