dgram: refactor SO_RCVBUF and SO_SNDBUF methods
This commit refactors the get/set send/receive buffer size methods in the following ways: - Use booleans instead of strings and numbers to differentiate between the send and receive buffers. - Reduce the amount of branching and complexity in the C++ code. Refs: https://github.com/nodejs/node/pull/13623 PR-URL: https://github.com/nodejs/node/pull/15483 Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
f4899ac4c0
commit
6983157adf
20
lib/dgram.js
20
lib/dgram.js
@ -40,6 +40,9 @@ const BIND_STATE_UNBOUND = 0;
|
|||||||
const BIND_STATE_BINDING = 1;
|
const BIND_STATE_BINDING = 1;
|
||||||
const BIND_STATE_BOUND = 2;
|
const BIND_STATE_BOUND = 2;
|
||||||
|
|
||||||
|
const RECV_BUFFER = true;
|
||||||
|
const SEND_BUFFER = false;
|
||||||
|
|
||||||
// Lazily loaded
|
// Lazily loaded
|
||||||
var cluster = null;
|
var cluster = null;
|
||||||
|
|
||||||
@ -146,10 +149,10 @@ function startListening(socket) {
|
|||||||
socket.fd = -42; // compatibility hack
|
socket.fd = -42; // compatibility hack
|
||||||
|
|
||||||
if (socket[kOptionSymbol].recvBufferSize)
|
if (socket[kOptionSymbol].recvBufferSize)
|
||||||
bufferSize(socket, socket[kOptionSymbol].recvBufferSize, 'recv');
|
bufferSize(socket, socket[kOptionSymbol].recvBufferSize, RECV_BUFFER);
|
||||||
|
|
||||||
if (socket[kOptionSymbol].sendBufferSize)
|
if (socket[kOptionSymbol].sendBufferSize)
|
||||||
bufferSize(socket, socket[kOptionSymbol].sendBufferSize, 'send');
|
bufferSize(socket, socket[kOptionSymbol].sendBufferSize, SEND_BUFFER);
|
||||||
|
|
||||||
socket.emit('listening');
|
socket.emit('listening');
|
||||||
}
|
}
|
||||||
@ -172,10 +175,7 @@ function bufferSize(self, size, buffer) {
|
|||||||
throw new errors.TypeError('ERR_SOCKET_BAD_BUFFER_SIZE');
|
throw new errors.TypeError('ERR_SOCKET_BAD_BUFFER_SIZE');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (buffer === 'recv')
|
return self._handle.bufferSize(size, buffer);
|
||||||
return self._handle.bufferSize(size, 0);
|
|
||||||
else
|
|
||||||
return self._handle.bufferSize(size, 1);
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new errors.Error('ERR_SOCKET_BUFFER_SIZE', e);
|
throw new errors.Error('ERR_SOCKET_BUFFER_SIZE', e);
|
||||||
}
|
}
|
||||||
@ -677,22 +677,22 @@ Socket.prototype.unref = function() {
|
|||||||
|
|
||||||
|
|
||||||
Socket.prototype.setRecvBufferSize = function(size) {
|
Socket.prototype.setRecvBufferSize = function(size) {
|
||||||
bufferSize(this, size, 'recv');
|
bufferSize(this, size, RECV_BUFFER);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Socket.prototype.setSendBufferSize = function(size) {
|
Socket.prototype.setSendBufferSize = function(size) {
|
||||||
bufferSize(this, size, 'send');
|
bufferSize(this, size, SEND_BUFFER);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Socket.prototype.getRecvBufferSize = function() {
|
Socket.prototype.getRecvBufferSize = function() {
|
||||||
return bufferSize(this, 0, 'recv');
|
return bufferSize(this, 0, RECV_BUFFER);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Socket.prototype.getSendBufferSize = function() {
|
Socket.prototype.getSendBufferSize = function() {
|
||||||
return bufferSize(this, 0, 'send');
|
return bufferSize(this, 0, SEND_BUFFER);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -233,31 +233,26 @@ void UDPWrap::BufferSize(const FunctionCallbackInfo<Value>& args) {
|
|||||||
args.GetReturnValue().Set(UV_EBADF));
|
args.GetReturnValue().Set(UV_EBADF));
|
||||||
|
|
||||||
CHECK(args[0]->IsUint32());
|
CHECK(args[0]->IsUint32());
|
||||||
CHECK(args[1]->IsUint32());
|
CHECK(args[1]->IsBoolean());
|
||||||
|
bool is_recv = args[1].As<v8::Boolean>()->Value();
|
||||||
|
const char* uv_func_name = is_recv ? "uv_recv_buffer_size" :
|
||||||
|
"uv_send_buffer_size";
|
||||||
|
|
||||||
if (!args[0]->IsInt32()) {
|
if (!args[0]->IsInt32())
|
||||||
if (args[1].As<Uint32>()->Value() == 0)
|
return env->ThrowUVException(UV_EINVAL, uv_func_name);
|
||||||
return env->ThrowUVException(UV_EINVAL, "uv_recv_buffer_size");
|
|
||||||
else
|
|
||||||
return env->ThrowUVException(UV_EINVAL, "uv_send_buffer_size");
|
|
||||||
}
|
|
||||||
|
|
||||||
int err;
|
uv_handle_t* handle = reinterpret_cast<uv_handle_t*>(&wrap->handle_);
|
||||||
int size = static_cast<int>(args[0].As<Uint32>()->Value());
|
int size = static_cast<int>(args[0].As<Uint32>()->Value());
|
||||||
if (args[1].As<Uint32>()->Value() == 0) {
|
int err;
|
||||||
err = uv_recv_buffer_size(reinterpret_cast<uv_handle_t*>(&wrap->handle_),
|
|
||||||
&size);
|
if (is_recv)
|
||||||
} else {
|
err = uv_recv_buffer_size(handle, &size);
|
||||||
err = uv_send_buffer_size(reinterpret_cast<uv_handle_t*>(&wrap->handle_),
|
else
|
||||||
&size);
|
err = uv_send_buffer_size(handle, &size);
|
||||||
}
|
|
||||||
|
if (err != 0)
|
||||||
|
return env->ThrowUVException(err, uv_func_name);
|
||||||
|
|
||||||
if (err != 0) {
|
|
||||||
if (args[1].As<Uint32>()->Value() == 0)
|
|
||||||
return env->ThrowUVException(err, "uv_recv_buffer_size");
|
|
||||||
else
|
|
||||||
return env->ThrowUVException(err, "uv_send_buffer_size");
|
|
||||||
}
|
|
||||||
args.GetReturnValue().Set(size);
|
args.GetReturnValue().Set(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user