https://github.com/saghul/node-abstractsocket
Abstract namespace socket support for Node
https://github.com/saghul/node-abstractsocket
javascript nodejs socket
Last synced: over 1 year ago
JSON representation
Abstract namespace socket support for Node
- Host: GitHub
- URL: https://github.com/saghul/node-abstractsocket
- Owner: saghul
- License: mit
- Created: 2014-07-14T22:15:52.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2019-11-15T15:44:08.000Z (over 6 years ago)
- Last Synced: 2025-02-27T07:13:23.929Z (over 1 year ago)
- Topics: javascript, nodejs, socket
- Language: JavaScript
- Homepage:
- Size: 36.1 KB
- Stars: 24
- Watchers: 4
- Forks: 13
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# node-abstractsocket
Because I like my sockets like my Picasso paintings: abstract.
[](https://nodei.co/npm/abstract-socket/)
## Abstract what?
Go read this: http://man7.org/linux/man-pages/man7/unix.7.html, I'll wait.
## Examples
Server:
```js
// abstract echo server
const abs = require('./lib/abstract_socket');
const server = abs.createServer(function(c) { //'connection' listener
console.log('client connected');
c.on('end', function() {
console.log('client disconnected');
});
c.write('hello\r\n');
c.pipe(c);
});
server.listen('\0foo');
```
Client:
```js
const abs = require('./lib/abstract_socket');
var client = abs.connect('\0foo', function() { //'connect' listener
console.log('client connected');
});
client.on('data', function(data) {
console.log(data.toString());
});
process.stdin.setEncoding('utf8');
process.stdin.on('readable', function() {
const chunk = process.stdin.read();
if (chunk !== null)
client.write(chunk);
});
```
## API
### abs.createServer(connectionListener)
Returns a new `AbstractSocketServer` object. `listen` can be called on
it passing the name of the abstract socket to bind to and listen, it follows
the API used for normal Unix domain sockets. NOTE: you must prepend the path with
the NULL byte ('\0') to indicate it's an abstract socket.
Emits an error if the `socket(2)` system call fails.
### AbstractSocketServer.listen(name, [callback]
Binds the server to the specified abstract socket name.
Emits an error if the `bind(2)` system call fails, or the given `name`
is invalid.
This function is asynchronous. When the server has been bound, 'listening' event
will be emitted. the last parameter callback will be added as an listener for the
'listening' event.
### abs.connect(name, connectListener)
Creates a connection to the given `path` in the abstract domain. NOTE: you must
prepend the path with the NULL byte ('\0') to indicate it's an abstract
socket.
Returns a new net.Socket object.
Emits an error if the `socket(2)` or `connect(2)` system calls fail,
or the given `name` is invalid.
## Tests
Run tests with `npm test`.
## Thanks
I borrowed massive amounts of inspiration/code from node-unix-dgram by @bnoordhuis :-)
@mmalecki taught me how to inherit like a pro.
@randunel refactored it heavily in v2.