dgram: send() can accept strings

Strings passed to Socket#send() will be passed to Buffer and parsed as
UTF8.
pull/5010/head
Trevor Norris 2013-10-28 14:58:37 -07:00
parent 0396b20ff4
commit 8130744044
5 changed files with 23 additions and 7 deletions

View File

@ -74,7 +74,7 @@ Emitted when an error occurs.
### socket.send(buf, offset, length, port, address, [callback]) ### socket.send(buf, offset, length, port, address, [callback])
* `buf` Buffer object. Message to be sent * `buf` Buffer object or string. Message to be sent
* `offset` Integer. Offset in the buffer where the message starts. * `offset` Integer. Offset in the buffer where the message starts.
* `length` Integer. Number of bytes in the message. * `length` Integer. Number of bytes in the message.
* `port` Integer. destination port * `port` Integer. destination port
@ -93,6 +93,11 @@ If the socket has not been previously bound with a call to `bind`, it's
assigned a random port number and bound to the "all interfaces" address assigned a random port number and bound to the "all interfaces" address
(0.0.0.0 for `udp4` sockets, ::0 for `udp6` sockets). (0.0.0.0 for `udp4` sockets, ::0 for `udp6` sockets).
With consideration for multi-byte characters, `offset` and `length` will
be calculated with respect to
[byte length](buffer.html#buffer_class_method_buffer_bytelength_string_encoding)
and not the character position.
Example of sending a UDP packet to a random port on `localhost`; Example of sending a UDP packet to a random port on `localhost`;
var dgram = require('dgram'); var dgram = require('dgram');

View File

@ -235,8 +235,11 @@ Socket.prototype.send = function(buffer,
callback) { callback) {
var self = this; var self = this;
if (util.isString(buffer))
buffer = new Buffer(buffer);
if (!util.isBuffer(buffer)) if (!util.isBuffer(buffer))
throw new TypeError('First argument must be a buffer object.'); throw new TypeError('First argument must be a buffer or string.');
offset = offset | 0; offset = offset | 0;
if (offset < 0) if (offset < 0)

View File

@ -48,5 +48,14 @@ assert.throws(function() {
assert.throws(function() { assert.throws(function() {
socket.send(buf, 4, 4, common.PORT, '127.0.0.1', assert.fail); socket.send(buf, 4, 4, common.PORT, '127.0.0.1', assert.fail);
}); });
assert.throws(function() {
socket.send('abc', 4, 1, common.PORT, '127.0.0.1', assert.fail);
});
assert.throws(function() {
socket.send('abc', 0, 4, common.PORT, '127.0.0.1', assert.fail);
});
assert.throws(function() {
socket.send('abc', -1, 2, common.PORT, '127.0.0.1', assert.fail);
});
socket.close(); // FIXME should not be necessary socket.close(); // FIXME should not be necessary

View File

@ -27,6 +27,6 @@ var dgram = require('dgram');
// Should throw but not crash. // Should throw but not crash.
var socket = dgram.createSocket('udp4'); var socket = dgram.createSocket('udp4');
assert.throws(function() { socket.send('BAM', 0, 1, 1, 'host') }, TypeError); assert.throws(function() { socket.send(true, 0, 1, 1, 'host') }, TypeError);
assert.throws(function() { socket.sendto('BAM', 0, 1, 1, 'host') }, TypeError); assert.throws(function() { socket.sendto(5, 0, 1, 1, 'host') }, TypeError);
socket.close(); socket.close();

View File

@ -25,11 +25,10 @@
var common = require('../common'); var common = require('../common');
var assert = require('assert'); var assert = require('assert');
var Buffer = require('buffer').Buffer, var fs = require('fs'),
fs = require('fs'),
dgram = require('dgram'), server, client, dgram = require('dgram'), server, client,
server_port = 20989, server_port = 20989,
message_to_send = new Buffer('A message to send'), message_to_send = 'A message to send',
timer; timer;
server = dgram.createSocket('udp4'); server = dgram.createSocket('udp4');