initial commit
This commit is contained in:
commit
59412361e1
32
README.md
Normal file
32
README.md
Normal file
@ -0,0 +1,32 @@
|
||||
# StreamPair
|
||||
|
||||
[](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
51
lib/socket-pair.js
Normal 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
27
package.json
Normal 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"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user