diff options
author | Damien O'Reilly <damienreilly@gmail.com> | 2017-06-11 17:58:53 -0400 |
---|---|---|
committer | Refael Ackermann <refack@gmail.com> | 2017-09-13 11:23:04 -0400 |
commit | 2ac7b433b42dd44b319e1113e045dda8df20a4f8 (patch) | |
tree | b0cda3dadf03b6579ead01317d935ed42a1183fe /lib/dgram.js | |
parent | fca7e49e4467077aebac359da016a889be77e4c5 (diff) | |
download | android-node-v8-2ac7b433b42dd44b319e1113e045dda8df20a4f8.tar.gz android-node-v8-2ac7b433b42dd44b319e1113e045dda8df20a4f8.tar.bz2 android-node-v8-2ac7b433b42dd44b319e1113e045dda8df20a4f8.zip |
dgram: support for setting socket buffer size
* setRecvBufferSize(int) and setSendBufferSize(int)
* added docs for send/receive buffer sizes
* Added options support to set buffer sizes in
dgram.createSocket().
PR-URL: https://github.com/nodejs/node/pull/13623
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'lib/dgram.js')
-rw-r--r-- | lib/dgram.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/dgram.js b/lib/dgram.js index 9e9806f5b0..fa2f476096 100644 --- a/lib/dgram.js +++ b/lib/dgram.js @@ -98,15 +98,19 @@ function _createSocketHandle(address, port, addressType, fd, flags) { return handle; } +const kOptionSymbol = Symbol('options symbol'); function Socket(type, listener) { EventEmitter.call(this); var lookup; + this[kOptionSymbol] = {}; if (type !== null && typeof type === 'object') { var options = type; type = options.type; lookup = options.lookup; + this[kOptionSymbol].recvBufferSize = options.recvBufferSize; + this[kOptionSymbol].sendBufferSize = options.sendBufferSize; } var handle = newHandle(type, lookup); @@ -141,6 +145,12 @@ function startListening(socket) { socket._bindState = BIND_STATE_BOUND; socket.fd = -42; // compatibility hack + if (socket[kOptionSymbol].recvBufferSize) + bufferSize(socket, socket[kOptionSymbol].recvBufferSize, 'recv'); + + if (socket[kOptionSymbol].sendBufferSize) + bufferSize(socket, socket[kOptionSymbol].sendBufferSize, 'send'); + socket.emit('listening'); } @@ -157,6 +167,20 @@ function replaceHandle(self, newHandle) { self._handle = newHandle; } +function bufferSize(self, size, buffer) { + if (size >>> 0 !== size) + throw new errors.TypeError('ERR_SOCKET_BAD_BUFFER_SIZE'); + + try { + if (buffer === 'recv') + return self._handle.bufferSize(size, 0); + else + return self._handle.bufferSize(size, 1); + } catch (e) { + throw new errors.Error('ERR_SOCKET_BUFFER_SIZE', e); + } +} + Socket.prototype.bind = function(port_, address_ /*, callback*/) { let port = port_; @@ -636,6 +660,27 @@ Socket.prototype.unref = function() { return this; }; + +Socket.prototype.setRecvBufferSize = function(size) { + bufferSize(this, size, 'recv'); +}; + + +Socket.prototype.setSendBufferSize = function(size) { + bufferSize(this, size, 'send'); +}; + + +Socket.prototype.getRecvBufferSize = function() { + return bufferSize(this, 0, 'recv'); +}; + + +Socket.prototype.getSendBufferSize = function() { + return bufferSize(this, 0, 'send'); +}; + + module.exports = { _createSocketHandle, createSocket, |