Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/derhuerst/node-sockopt
getsockopt & setsockopt for Node.js sockets.
https://github.com/derhuerst/node-sockopt
getsockopt setsockopt socket
Last synced: 5 days ago
JSON representation
getsockopt & setsockopt for Node.js sockets.
- Host: GitHub
- URL: https://github.com/derhuerst/node-sockopt
- Owner: derhuerst
- License: isc
- Created: 2020-02-25T22:39:37.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-09-25T10:50:20.000Z (about 1 year ago)
- Last Synced: 2024-10-03T23:53:55.084Z (about 1 month ago)
- Topics: getsockopt, setsockopt, socket
- Language: JavaScript
- Homepage: https://github.com/derhuerst/node-sockopt#sockopt
- Size: 31.3 KB
- Stars: 9
- Watchers: 3
- Forks: 2
- Open Issues: 6
-
Metadata Files:
- Readme: readme.md
- License: license.md
Awesome Lists containing this project
README
# sockopt
**[`getsockopt`](https://linux.die.net/man/3/getsockopt) & [`setsockopt`](https://linux.die.net/man/3/setsockopt) for Node.js sockets.**
Allows you to set all the socket flags that Node does not expose via its built-in [UDP](https://nodejs.org/api/dgram.html#dgram_class_dgram_socket) & [TCP](https://nodejs.org/api/net.html#net_class_net_socket) socket APIs.
[![npm version](https://img.shields.io/npm/v/sockopt.svg)](https://www.npmjs.com/package/sockopt)
![ISC-licensed](https://img.shields.io/github/license/derhuerst/node-sockopt.svg)
![minimum Node.js version](https://img.shields.io/node/v/sockopt.svg)
[![support me via GitHub Sponsors](https://img.shields.io/badge/support%20me-donate-fa7664.svg)](https://github.com/sponsors/derhuerst)
[![chat with me on Twitter](https://img.shields.io/badge/chat%20with%20me-on%20Twitter-1da1f2.svg)](https://twitter.com/derhuerst)## Installation
```shell
npm install sockopt
```## Usage
```js
const {createSocket} = require('dgram')
const {getsockopt, setsockopt} = require('sockopt')// https://github.com/apple/darwin-xnu/blob/a449c6a3b8014d9406c2ddbdc81795da24aa7443/bsd/sys/socket.h#L165
const SO_SNDBUF = 0x1001const socket = createSocket({type: 'udp4'})
socket.bind(() => {
console.log('SO_SNDBUF is', getsockopt(socket, SOL_SOCKET, SO_SNDBUF))
setsockopt(socket, SOL_SOCKET, SO_SNDBUF, 1024)
console.log('SO_SNDBUF is now', getsockopt(socket, SOL_SOCKET, SO_SNDBUF))
})
``````
SO_SNDBUF is 9216
SO_SNDBUF is now 1024
```### ceveat: integer-based flags only
*Note:* **Currently, this package only supports read & writing the flags via *integers*.**
Set boolean flags (`SO_BROADCAST`) via `0` (disabled) and `1` (enabled), or `+false` and `+true` to be more explicit. Due to how the [`getsockopt` syscall](https://linux.die.net/man/3/getsockopt) works, `0` will be returned for "disabled", and non-`0` for "enabled".
Struct-based flags (e.g. `SO_SNDTIMEO`) *do not* work yet.
## Related
- [Linux `sys/socket.h`](https://github.com/torvalds/linux/blob/a2d79c7174aeb43b13020dd53d85a7aefdd9f3e5/include/uapi/asm-generic/socket.h) with common Linux socket flags.
- [Darwin `sys/socket.h`](https://github.com/apple/darwin-xnu/blob/master/bsd/sys/socket.h) with all macOS socket flags.
- [Node.js discussion about exposing `setsockopt`](https://github.com/nodejs/node/issues/22994)
- [`node-getsockopt`](https://github.com/janakagoon/node-getsockopt/blob/master/package.json) – An older implementation, does not use [N-API](https://nodejs.org/docs/latest-v10.x/api/n-api.html) but the v8 API directly.
- [`setsockopt`](https://github.com/smilingthax/node-setsockopt) – An older implementation with Windows support.## Contributing
If you have a question or need support using `sockopt`, please double-check your code and setup first. If you think you have found a bug or want to propose a feature, use [the issues page](https://github.com/derhuerst/node-sockopt/issues).