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