|
|
@ -146,17 +146,33 @@ Socket.prototype.address = function () { |
|
|
|
Socket.prototype.send = function(port, addr, buffer, offset, length) { |
|
|
|
var self = this; |
|
|
|
|
|
|
|
var lastArg = arguments[arguments.length - 1]; |
|
|
|
var callback = typeof lastArg === 'function' ? lastArg : null; |
|
|
|
|
|
|
|
if (!isPort(arguments[0])) { |
|
|
|
try { |
|
|
|
if (!self.fd) { |
|
|
|
self.type = 'unix_dgram'; |
|
|
|
self.fd = socket(self.type); |
|
|
|
} |
|
|
|
sendto(self.fd, buffer, offset, length, 0, port, addr); |
|
|
|
var bytes = sendto(self.fd, buffer, offset, length, 0, port, addr); |
|
|
|
} catch (e) { |
|
|
|
if (callback) callback(e); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (callback) callback(null, bytes); |
|
|
|
|
|
|
|
} else { |
|
|
|
dns.lookup(arguments[1], function (err, ip, addressType) { |
|
|
|
// DNS error
|
|
|
|
if (err) { |
|
|
|
if (callback) callback(err); |
|
|
|
self.emit('error', err); |
|
|
|
} else { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
if (!self.fd) { |
|
|
|
self.type = addressType == 4 ? 'udp4' : 'udp6'; |
|
|
|
self.fd = socket(self.type); |
|
|
@ -165,8 +181,14 @@ Socket.prototype.send = function(port, addr, buffer, offset, length) { |
|
|
|
self._startWatcher(); |
|
|
|
}); |
|
|
|
} |
|
|
|
sendto(self.fd, buffer, offset, length, 0, port, ip); |
|
|
|
var bytes = sendto(self.fd, buffer, offset, length, 0, port, ip); |
|
|
|
} catch (err) { |
|
|
|
// socket creation, or sendto error.
|
|
|
|
if (callback) callback(err); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (callback) callback(null, bytes); |
|
|
|
}); |
|
|
|
} |
|
|
|
}; |
|
|
|