Skip to content

Commit 67e2a15

Browse files
santigimenoBridgeAR
authored andcommitted
net: honor default values in Socket constructor
Specifically `readable` and `writable` that default to `false`. PR-URL: #19971 Fixes: libuv/libuv#1794 Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: Anatoli Papirovski <[email protected]>
1 parent 8786889 commit 67e2a15

File tree

4 files changed

+55
-8
lines changed

4 files changed

+55
-8
lines changed

lib/internal/child_process.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,11 @@ const handleConversion = {
131131
},
132132

133133
got: function(message, handle, emit) {
134-
var socket = new net.Socket({ handle: handle });
135-
socket.readable = socket.writable = true;
134+
var socket = new net.Socket({
135+
handle: handle,
136+
readable: true,
137+
writable: true
138+
});
136139

137140
// if the socket was created by net.Server we will track the socket
138141
if (message.key) {

lib/internal/wrap_js_stream.js

+2
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ class JSStreamWrap extends Socket {
7272
this.stream = stream;
7373
this[kCurrentWriteRequest] = null;
7474
this[kCurrentShutdownRequest] = null;
75+
this.readable = stream.readable;
76+
this.writable = stream.writable;
7577

7678
// Start reading.
7779
this.read(0);

lib/net.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,8 @@ function Socket(options) {
244244
else
245245
options = util._extend({}, options);
246246

247+
options.readable = options.readable || false;
248+
options.writable = options.writable || false;
247249
const allowHalfOpen = options.allowHalfOpen;
248250

249251
// Prevent the "no-half-open enforcer" from being inherited from `Duplex`.
@@ -283,9 +285,6 @@ function Socket(options) {
283285
value: 0, writable: true
284286
});
285287
}
286-
} else {
287-
// these will be set once there is a connection
288-
this.readable = this.writable = false;
289288
}
290289

291290
// shut down the socket when we're finished with it.
@@ -1537,10 +1536,10 @@ function onconnection(err, clientHandle) {
15371536
var socket = new Socket({
15381537
handle: clientHandle,
15391538
allowHalfOpen: self.allowHalfOpen,
1540-
pauseOnCreate: self.pauseOnConnect
1539+
pauseOnCreate: self.pauseOnConnect,
1540+
readable: true,
1541+
writable: true
15411542
});
1542-
socket.readable = socket.writable = true;
1543-
15441543

15451544
self._connections++;
15461545
socket.server = self;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
'use strict';
2+
3+
const common = require('../common');
4+
const assert = require('assert');
5+
const net = require('net');
6+
7+
function test(sock, readable, writable) {
8+
let socket;
9+
if (sock instanceof net.Socket) {
10+
socket = sock;
11+
} else {
12+
socket = new net.Socket(sock);
13+
socket.unref();
14+
}
15+
16+
assert.strictEqual(socket.readable, readable);
17+
assert.strictEqual(socket.writable, writable);
18+
}
19+
20+
test(undefined, false, false);
21+
22+
const server = net.createServer(common.mustCall((socket) => {
23+
test(socket, true, true);
24+
test({ handle: socket._handle }, false, false);
25+
test({ handle: socket._handle, readable: true, writable: true }, true, true);
26+
if (socket._handle.fd >= 0) {
27+
test(socket._handle.fd, false, false);
28+
test({ fd: socket._handle.fd }, false, false);
29+
test({ fd: socket._handle.fd, readable: true, writable: true }, true, true);
30+
}
31+
32+
server.close();
33+
}));
34+
35+
server.listen(common.mustCall(() => {
36+
const { port } = server.address();
37+
const socket = net.connect(port, common.mustCall(() => {
38+
test(socket, true, true);
39+
socket.end();
40+
}));
41+
42+
test(socket, false, true);
43+
}));

0 commit comments

Comments
 (0)