initial commit

This commit is contained in:
AJ ONeal 2017-04-28 11:29:30 -06:00
commit 59412361e1
3 changed files with 110 additions and 0 deletions

32
README.md Normal file
View File

@ -0,0 +1,32 @@
# StreamPair
[![NPM version](https://badge.fury.io/js/socket-pair.svg)](http://badge.fury.io/js/socket-pair)
A pair of coupled sockets.
Similar to `stream-pair`, but with sockets with real fds. A workaround for <https://github.com/nodejs/node/issues/12716>.
## Usage
```javascript
var socketPair = require('socket-pair');
socketPair.create(function (pair) {
var a = pair.client;
var b = pair.connection;
a.write('123');
b.on('data', function (chunk) {
console.log(chunk.toString('utf8'));
});
socketPair.closeAll();
});
```
## API
```
socketPair.create(cb) // creates or reuses a socket server
socketPair.closeAll() // closes the server and all sockets
```

51
lib/socket-pair.js Normal file
View File

@ -0,0 +1,51 @@
'use strict';
var server;
var listening = false;
var sock;
function createServer(prefix) {
var os = require('os');
var net = require('net');
var path = require('path');
var sockname = (prefix || 'node-socket-pair') + '.' + require('crypto').randomBytes(16).toString('hex') + '.sock';
if (/win/.test(os.platform())) {
sock = path.join('\\\\?\\pipe', process.cwd(), sockname);
}
else {
sock = path.join(os.tmpdir(), sockname);
}
server = net.createServer();
}
exports.create = function create(cb, prefix) {
var net = require('net');
var writer;
// This server listens on a Unix socket or Windows pipe at 'sock'
if (!server) {
createServer(prefix);
}
if (!listening) {
server.listen(sock, function () {
writer = net.connect(sock);
listening = true;
});
}
server.once('connection', function each(reader) {
cb({ reader: reader, writer: writer });
});
if (listening) {
writer = net.connect(sock);
}
};
exports.closeAll = function () {
if (server) {
server.close();
}
};

27
package.json Normal file
View File

@ -0,0 +1,27 @@
{
"name": "socket-pair",
"version": "1.0.0",
"description": "Similar to stream-pair, but with sockets with real fds. A workaround for https://github.com/nodejs/node/issues/12716",
"main": "lib/socket-pair.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git@git.daplie.com:Daplie/socket-pair.git"
},
"keywords": [
"tls",
"socket",
"socketpair",
"streampair",
"pair",
"stream",
"duplex",
"reader",
"coupled",
"writer"
],
"author": "AJ ONeal <aj@daplie.com> (https://coolaj86.com)",
"license": "MIT OR Apache-2.0"
}