ioctl-native

0.1.0 • Public • Published

ioctl-native

A simple N-API native node module for the ioctl function

Installation

$ npm install ioctl-native

Usage

const ioctl = require('ioctl-native'
rc = ioctl(fd, request, argp)

API

rc = ioctl(fd, request, argp)

Issue a request to a device specified by the file descriptor fd with an argument poinrter argp that should be an instance of a Buffer.

Below is an example request to get the number of bytes in the input buffer:

const FIONREAD = 0x541b
const status = Buffer.alloc(4) // 32 bit int (little endian)
const fd = getSocketFileDescriptor()
 
assert(0 === ioctl(fd, FIONREAD, status))
 
const pendingReads = status.readInt32LE(0)

Example

The following is an example that creates two sockets, one that is bound to an address and port, and the other that writes a hello message of length 5. The example queries the pending number of bytes in the input buffer for the reader socket (sockets.reader) and logs it out.

const assert = require('assert')
const dgram = require('dgram')
const ioctl = require('ioctl-native')
const fs = require('fs')
 
const FIONREAD = 0x541b
const hello = Buffer.from('hello')
const status = Buffer.alloc(4) // 32 bit int (little endian)
const sockets = {
  reader: dgram.createSocket('udp4'),
  writer: dgram.createSocket('udp4'),
}
 
sockets.reader.bind(0, (err) => {
  const { address, port } = sockets.reader.address()
 
  sockets.writer.send(hello, 0, hello.length, port, address, (err) => {
    assert(0 === ioctl(sockets.reader._handle.fd, FIONREAD, status))
    const pending = status.readInt32LE(0)
 
    console.log('> %d bytes pending in reader socket', pending) // pending == hello.length
 
    sockets.reader.close()
    sockets.writer.close()
  })
})

License

MIT

Dependents (0)

Package Sidebar

Install

npm i ioctl-native

Weekly Downloads

1

Version

0.1.0

License

MIT

Unpacked Size

37 kB

Total Files

12

Last publish

Collaborators

  • werle