summaryrefslogtreecommitdiff
path: root/lib/dgram.js
diff options
context:
space:
mode:
authorDamien O'Reilly <damienreilly@gmail.com>2017-06-11 17:58:53 -0400
committerRefael Ackermann <refack@gmail.com>2017-09-13 11:23:04 -0400
commit2ac7b433b42dd44b319e1113e045dda8df20a4f8 (patch)
treeb0cda3dadf03b6579ead01317d935ed42a1183fe /lib/dgram.js
parentfca7e49e4467077aebac359da016a889be77e4c5 (diff)
downloadandroid-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.js45
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,