Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Add callback to dgramSocket.send()

  • Loading branch information...
commit cbf2a2233eb2ef17b7a341b7e88c4309f80457e0 1 parent 81ad810
@ry ry authored
Showing with 34 additions and 7 deletions.
  1. +28 −6 lib/dgram.js
  2. +6 −1 test/simple/test-dgram-pingpong.js
View
34 lib/dgram.js
@@ -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])) {
- if (!self.fd) {
- self.type = 'unix_dgram';
- self.fd = socket(self.type);
+ try {
+ if (!self.fd) {
+ self.type = 'unix_dgram';
+ self.fd = socket(self.type);
+ }
+ var bytes = sendto(self.fd, buffer, offset, length, 0, port, addr);
+ } catch (e) {
+ if (callback) callback(e);
+ return;
}
- sendto(self.fd, buffer, offset, length, 0, port, addr);
+
+ 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);
});
}
};
View
7 test/simple/test-dgram-pingpong.js
@@ -4,7 +4,9 @@ var dgram = require("dgram");
var tests_run = 0;
+
function pingPongTest (port, host) {
+ var callbacks = 0;
var N = 500;
var count = 0;
var sent_final_ping = false;
@@ -17,7 +19,9 @@ function pingPongTest (port, host) {
if (/PING/.exec(msg)) {
var buf = new Buffer(4);
buf.write('PONG');
- server.send(rinfo.port, rinfo.address, buf, 0, buf.length);
+ server.send(rinfo.port, rinfo.address, buf, 0, buf.length, function (err, sent) {
+ callbacks++;
+ });
}
});
@@ -58,6 +62,7 @@ function pingPongTest (port, host) {
assert.equal(N, count);
tests_run += 1;
server.close();
+ assert.equal(N-1, callbacks);
});
client.addListener("error", function (e) {
Please sign in to comment.
Something went wrong with that request. Please try again.