Skip to content

Commit 3142c25

Browse files
cjihrigMylesBorins
authored andcommitted
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: #13623 PR-URL: #15483 Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: Luigi Pinca <[email protected]>
1 parent c6aaaf0 commit 3142c25

File tree

2 files changed

+26
-31
lines changed

2 files changed

+26
-31
lines changed

lib/dgram.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ const BIND_STATE_UNBOUND = 0;
4040
const BIND_STATE_BINDING = 1;
4141
const BIND_STATE_BOUND = 2;
4242

43+
const RECV_BUFFER = true;
44+
const SEND_BUFFER = false;
45+
4346
// Lazily loaded
4447
var cluster = null;
4548

@@ -146,10 +149,10 @@ function startListening(socket) {
146149
socket.fd = -42; // compatibility hack
147150

148151
if (socket[kOptionSymbol].recvBufferSize)
149-
bufferSize(socket, socket[kOptionSymbol].recvBufferSize, 'recv');
152+
bufferSize(socket, socket[kOptionSymbol].recvBufferSize, RECV_BUFFER);
150153

151154
if (socket[kOptionSymbol].sendBufferSize)
152-
bufferSize(socket, socket[kOptionSymbol].sendBufferSize, 'send');
155+
bufferSize(socket, socket[kOptionSymbol].sendBufferSize, SEND_BUFFER);
153156

154157
socket.emit('listening');
155158
}
@@ -172,10 +175,7 @@ function bufferSize(self, size, buffer) {
172175
throw new errors.TypeError('ERR_SOCKET_BAD_BUFFER_SIZE');
173176

174177
try {
175-
if (buffer === 'recv')
176-
return self._handle.bufferSize(size, 0);
177-
else
178-
return self._handle.bufferSize(size, 1);
178+
return self._handle.bufferSize(size, buffer);
179179
} catch (e) {
180180
throw new errors.Error('ERR_SOCKET_BUFFER_SIZE', e);
181181
}
@@ -677,22 +677,22 @@ Socket.prototype.unref = function() {
677677

678678

679679
Socket.prototype.setRecvBufferSize = function(size) {
680-
bufferSize(this, size, 'recv');
680+
bufferSize(this, size, RECV_BUFFER);
681681
};
682682

683683

684684
Socket.prototype.setSendBufferSize = function(size) {
685-
bufferSize(this, size, 'send');
685+
bufferSize(this, size, SEND_BUFFER);
686686
};
687687

688688

689689
Socket.prototype.getRecvBufferSize = function() {
690-
return bufferSize(this, 0, 'recv');
690+
return bufferSize(this, 0, RECV_BUFFER);
691691
};
692692

693693

694694
Socket.prototype.getSendBufferSize = function() {
695-
return bufferSize(this, 0, 'send');
695+
return bufferSize(this, 0, SEND_BUFFER);
696696
};
697697

698698

src/udp_wrap.cc

+16-21
Original file line numberDiff line numberDiff line change
@@ -233,31 +233,26 @@ void UDPWrap::BufferSize(const FunctionCallbackInfo<Value>& args) {
233233
args.GetReturnValue().Set(UV_EBADF));
234234

235235
CHECK(args[0]->IsUint32());
236-
CHECK(args[1]->IsUint32());
236+
CHECK(args[1]->IsBoolean());
237+
bool is_recv = args[1].As<v8::Boolean>()->Value();
238+
const char* uv_func_name = is_recv ? "uv_recv_buffer_size" :
239+
"uv_send_buffer_size";
237240

238-
if (!args[0]->IsInt32()) {
239-
if (args[1].As<Uint32>()->Value() == 0)
240-
return env->ThrowUVException(UV_EINVAL, "uv_recv_buffer_size");
241-
else
242-
return env->ThrowUVException(UV_EINVAL, "uv_send_buffer_size");
243-
}
241+
if (!args[0]->IsInt32())
242+
return env->ThrowUVException(UV_EINVAL, uv_func_name);
244243

245-
int err;
244+
uv_handle_t* handle = reinterpret_cast<uv_handle_t*>(&wrap->handle_);
246245
int size = static_cast<int>(args[0].As<Uint32>()->Value());
247-
if (args[1].As<Uint32>()->Value() == 0) {
248-
err = uv_recv_buffer_size(reinterpret_cast<uv_handle_t*>(&wrap->handle_),
249-
&size);
250-
} else {
251-
err = uv_send_buffer_size(reinterpret_cast<uv_handle_t*>(&wrap->handle_),
252-
&size);
253-
}
246+
int err;
247+
248+
if (is_recv)
249+
err = uv_recv_buffer_size(handle, &size);
250+
else
251+
err = uv_send_buffer_size(handle, &size);
252+
253+
if (err != 0)
254+
return env->ThrowUVException(err, uv_func_name);
254255

255-
if (err != 0) {
256-
if (args[1].As<Uint32>()->Value() == 0)
257-
return env->ThrowUVException(err, "uv_recv_buffer_size");
258-
else
259-
return env->ThrowUVException(err, "uv_send_buffer_size");
260-
}
261256
args.GetReturnValue().Set(size);
262257
}
263258

0 commit comments

Comments
 (0)