summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pipe_wrap.cc4
-rw-r--r--test/parallel/test-pipe-writev.js46
2 files changed, 50 insertions, 0 deletions
diff --git a/src/pipe_wrap.cc b/src/pipe_wrap.cc
index 8fd2f8f5f3..5f47dadddb 100644
--- a/src/pipe_wrap.cc
+++ b/src/pipe_wrap.cc
@@ -53,7 +53,11 @@ void PipeWrap::Initialize(Local<Object> target,
env->SetProtoMethod(t, "ref", HandleWrap::Ref);
env->SetProtoMethod(t, "hasRef", HandleWrap::HasRef);
+#ifdef _WIN32
StreamWrap::AddMethods(env, t);
+#else
+ StreamWrap::AddMethods(env, t, StreamBase::kFlagHasWritev);
+#endif
env->SetProtoMethod(t, "bind", Bind);
env->SetProtoMethod(t, "listen", Listen);
diff --git a/test/parallel/test-pipe-writev.js b/test/parallel/test-pipe-writev.js
new file mode 100644
index 0000000000..6440b5f623
--- /dev/null
+++ b/test/parallel/test-pipe-writev.js
@@ -0,0 +1,46 @@
+'use strict';
+
+const common = require('../common');
+const assert = require('assert');
+const net = require('net');
+
+if (common.isWindows) {
+ common.skip('Unix-specific test');
+ return;
+}
+
+common.refreshTmpDir();
+
+const server = net.createServer((connection) => {
+ connection.on('error', (err) => {
+ throw err;
+ });
+
+ const writev = connection._writev.bind(connection);
+ connection._writev = common.mustCall(writev);
+
+ connection.cork();
+ connection.write('pi');
+ connection.write('ng');
+ connection.end();
+});
+
+server.on('error', (err) => {
+ throw err;
+});
+
+server.listen(common.PIPE, () => {
+ const client = net.connect(common.PIPE);
+
+ client.on('error', (err) => {
+ throw err;
+ });
+
+ client.on('data', common.mustCall((data) => {
+ assert.strictEqual(data.toString(), 'ping');
+ }));
+
+ client.on('end', () => {
+ server.close();
+ });
+});