better bookkeeping
This commit is contained in:
parent
59412361e1
commit
00fd61add0
12
README.md
12
README.md
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
[](http://badge.fury.io/js/socket-pair)
|
[](http://badge.fury.io/js/socket-pair)
|
||||||
|
|
||||||
A pair of coupled sockets.
|
A pair of coupled Unix sockets (or Windows pipes).
|
||||||
|
|
||||||
Similar to `stream-pair`, but with sockets with real fds. A workaround for <https://github.com/nodejs/node/issues/12716>.
|
Similar to `stream-pair`, but with sockets with real fds. A workaround for <https://github.com/nodejs/node/issues/12716>.
|
||||||
|
|
||||||
@ -11,9 +11,9 @@ Similar to `stream-pair`, but with sockets with real fds. A workaround for <http
|
|||||||
```javascript
|
```javascript
|
||||||
var socketPair = require('socket-pair');
|
var socketPair = require('socket-pair');
|
||||||
|
|
||||||
socketPair.create(function (pair) {
|
socketPair.create(function (err, pair) {
|
||||||
var a = pair.client;
|
var a = pair.client; // as in `client = net.connect()`
|
||||||
var b = pair.connection;
|
var b = pair.connection; // as in `server.on('connection', function (conn) { ... })`
|
||||||
|
|
||||||
a.write('123');
|
a.write('123');
|
||||||
b.on('data', function (chunk) {
|
b.on('data', function (chunk) {
|
||||||
@ -24,6 +24,10 @@ socketPair.create(function (pair) {
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
I named them `client` and `connection`, but their names really have no meaning.
|
||||||
|
|
||||||
|
You can call them `a` and `b` or `other` and `one` or `red` and `blue`. It makes no difference.
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -4,7 +4,7 @@ var server;
|
|||||||
var listening = false;
|
var listening = false;
|
||||||
var sock;
|
var sock;
|
||||||
|
|
||||||
function createServer(prefix) {
|
function createServer(cb, prefix) {
|
||||||
var os = require('os');
|
var os = require('os');
|
||||||
var net = require('net');
|
var net = require('net');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
@ -18,29 +18,44 @@ function createServer(prefix) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
server = net.createServer();
|
server = net.createServer();
|
||||||
|
function onServerError(err) {
|
||||||
|
cb(err);
|
||||||
|
}
|
||||||
|
server.once('error', onServerError);
|
||||||
|
server.once('listening', function () {
|
||||||
|
listening = true;
|
||||||
|
server.removeListener('error', onServerError);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.create = function create(cb, prefix) {
|
exports.create = function create(cb, prefix) {
|
||||||
var net = require('net');
|
var net = require('net');
|
||||||
var writer;
|
var client;
|
||||||
|
|
||||||
|
function createConnection() {
|
||||||
|
function onClientError(err) {
|
||||||
|
cb(err);
|
||||||
|
}
|
||||||
|
client = net.connect(sock, function () {
|
||||||
|
client.removeListener('error', onClientError);
|
||||||
|
});
|
||||||
|
client.once('error', onClientError);
|
||||||
|
}
|
||||||
|
|
||||||
// This server listens on a Unix socket or Windows pipe at 'sock'
|
// This server listens on a Unix socket or Windows pipe at 'sock'
|
||||||
if (!server) {
|
if (!server) {
|
||||||
createServer(prefix);
|
createServer(cb, prefix);
|
||||||
}
|
|
||||||
if (!listening) {
|
|
||||||
server.listen(sock, function () {
|
|
||||||
writer = net.connect(sock);
|
|
||||||
listening = true;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
server.once('connection', function each(reader) {
|
server.once('connection', function onEach(connection) {
|
||||||
cb({ reader: reader, writer: writer });
|
cb(null, { client: client, connection: connection });
|
||||||
});
|
});
|
||||||
|
|
||||||
if (listening) {
|
if (!listening) {
|
||||||
writer = net.connect(sock);
|
server.listen(sock, createConnection);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
createConnection();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user