dgram: handle default address case when offset and length are specified
Fixes a regression introduced by: https://github.com/nodejs/node/pull/4374. Adds a new test to avoid similar issue in the future. The test is disabled on windows, because this feature never worked there. Fixes: https://github.com/nodejs/node/issues/5398 Reviewed-By: Roman Reiss <me@silverwind.io> Reviewed-By: Rod Vagg <rod@vagg.org> Reviewed-By: Evan Lucas <evanlucas@me.com>
This commit is contained in:
parent
ffdc046e5c
commit
725ffdb9b7
10
lib/dgram.js
10
lib/dgram.js
@ -286,6 +286,13 @@ function enqueue(self, toEnqueue) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// valid combinations
|
||||||
|
// send(buffer, offset, length, port, address, callback)
|
||||||
|
// send(buffer, offset, length, port, address)
|
||||||
|
// send(buffer, offset, length, port)
|
||||||
|
// send(bufferOrList, port, address, callback)
|
||||||
|
// send(bufferOrList, port, address)
|
||||||
|
// send(bufferOrList, port)
|
||||||
Socket.prototype.send = function(buffer,
|
Socket.prototype.send = function(buffer,
|
||||||
offset,
|
offset,
|
||||||
length,
|
length,
|
||||||
@ -294,8 +301,7 @@ Socket.prototype.send = function(buffer,
|
|||||||
callback) {
|
callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
// same as arguments.length === 5 || arguments.length === 6
|
if (address || (port && typeof port !== 'function')) {
|
||||||
if (address) {
|
|
||||||
buffer = sliceBuffer(buffer, offset, length);
|
buffer = sliceBuffer(buffer, offset, length);
|
||||||
} else {
|
} else {
|
||||||
callback = port;
|
callback = port;
|
||||||
|
43
test/parallel/test-dgram-send-default-host.js
Normal file
43
test/parallel/test-dgram-send-default-host.js
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const assert = require('assert');
|
||||||
|
const dgram = require('dgram');
|
||||||
|
|
||||||
|
if (common.isWindows) {
|
||||||
|
// on Windows this test will fail
|
||||||
|
// see https://github.com/nodejs/node/pull/5407
|
||||||
|
console.log('1..0 # Skipped: This test does not apply on Windows.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const client = dgram.createSocket('udp4');
|
||||||
|
|
||||||
|
const timer = setTimeout(function() {
|
||||||
|
throw new Error('Timeout');
|
||||||
|
}, common.platformTimeout(2000));
|
||||||
|
|
||||||
|
const toSend = [new Buffer(256), new Buffer(256), new Buffer(256), 'hello'];
|
||||||
|
|
||||||
|
toSend[0].fill('x');
|
||||||
|
toSend[1].fill('y');
|
||||||
|
toSend[2].fill('z');
|
||||||
|
|
||||||
|
client.on('listening', function() {
|
||||||
|
client.send(toSend[0], 0, toSend[0].length, common.PORT);
|
||||||
|
client.send(toSend[1], common.PORT);
|
||||||
|
client.send([toSend[2]], common.PORT);
|
||||||
|
client.send(toSend[3], 0, toSend[3].length, common.PORT);
|
||||||
|
});
|
||||||
|
|
||||||
|
client.on('message', function(buf, info) {
|
||||||
|
const expected = toSend.shift().toString();
|
||||||
|
assert.ok(buf.toString() === expected, 'message was received correctly');
|
||||||
|
|
||||||
|
if (toSend.length === 0) {
|
||||||
|
client.close();
|
||||||
|
clearTimeout(timer);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
client.bind(common.PORT);
|
Loading…
x
Reference in New Issue
Block a user