Native bindings for libutp

Overview

utp-native

Native bindings for libutp. For more information about utp read BEP 29.

npm install utp-native

js-standard-style

Usage

const utp = require('utp-native')

const server = utp.createServer(function (socket) {
  socket.pipe(socket) // echo server
})

server.listen(10000, function () {
  const socket = utp.connect(10000)

  socket.write('hello world')
  socket.end()

  socket.on('data', function (data) {
    console.log('echo: ' + data)
  })
  socket.on('end', function () {
    console.log('echo: (ended)')
  })
})

API

There two APIs available. One that mimicks the net core module in Node as much as possible and another one that allows you to reuse the same udp socket for both the client and server. The last one is useful if you plan on using this in combination with NAT hole punching.

net-like API

server = utp.createServer([options], [onconnection])

Create a new utp server instance.

Options include

{
  allowHalfOpen: true // set to false to disallow half open connections
}

server.listen([port], [address], [onlistening])

Listen for on port. If you don't provide a port or pass in 0 a free port will be used. Optionally you can provide an interface address as well, defaults to 0.0.0.0.

addr = server.address()

Returns an address object, {port, address} that tell you which port / address this server is bound to.

server.on('listening')

Emitted when the server is listening

server.on('connection', connection)

Emitted when a client has connected to this server

server.on('error', err)

Emitted when a critical error happened

server.close()

Closes the server.

server.on('close')

Emitted when the server is fully closed. Note that this will only happen after all connections to the server are closed.

server.maxConnections

Set this property is you want to limit the max amount of connections you want to receive

server.connections

An array of all the connections the server has.

server.ref()

Opposite of unref.

server.unref()

Unreferences the server from the node event loop.

connection = utp.connect(port, [host], [options])

Create a new client connection. host defaults to localhost. The client connection is a duplex stream that you can write / read from.

Options include:

{
  allowHalfOpen: true // set to false to disallow half open connections
}

address = connection.address()

Similar to server.address.

connection.remoteAddress

The address of the remote peer.

connection.remotePort

The port of the remote peer.

connection.setInteractive(interactive)

If you don't need every packet as soon as they arrive set connection.setInteractive(false).

This might greatly improve performance

connection.setContentSize(size)

Set the expected content size. This will make utp-native buffer larger chunks of data until size bytes have been read.

This might greatly improve performance

connection.setTimeout(ms, [ontimeout])

Set a continuous timeout. If no packets have been received within ms a timeout event is triggered. Up to you to listen for this event and potentially destroy the socket. All timeouts are cancelled on socket end.

connection.on('connect')

Emitted when the connection is actually connected.

connection.on('close')

Emitted when the connection is fully closed.

connection.on('error', err)

Emitted if an unexpected error happens.

connection.destroy()

Forcefully destroys the connection.

In addition to this the connection has all the classic stream methods such as .write etc.

Note that utp requires the first data message to be sent from the client in a client/server scenario. In most cases this is what happens anyway but something to be aware of. This module will cork the server stream until it receives a client message because of that.

Socket API

The socket api allows you to reuse the same underlying UDP socket to both connect to other clients on accept incoming connections. It also mimicks the node core dgram socket api.

socket = utp([options])

Create a new utp socket.

Options include:

{
  allowHalfOpen: true // set to false to disallow half open connections
}

socket.bind([port], [host], [onlistening])

Bind the socket.

socket.on('listening')

Emitted when the socket is bound.

socket.send(buf, offset, len, port, host, [callback])

Send a udp message.

socket.on('message', buffer, rinfo)

Listen for a udp message.

socket.close()

Close the socket.

address = socket.address()

Returns an address object, {port, address} that tell you which port / address this socket is bound to.

socket.on('close')

Emitted when the socket is fully closed.

socket.on('error')

Emitted if the socket experiences an error.

socket.listen([port], [host], [onlistening])

Start listening for incoming connections. Performs a bind as well.

socket.on('connection', connection)

Emitted after you start listening and a client connects to this socket. Connection is similar to the connection used in the net api.

connection = socket.connect(port, host)

Connect to another socket. Connection is similar to the connection used in the net api.

socket.unref()

Dereference the socket from the node event loop.

socket.ref()

Opposite of socket.unref()

Development

When developing you'll need to install the build tools based on your platform to make node-gyp run. Then run:

npm run fetch-libutp

This will fetch the libutp dependency as a gitsubmodule. Then build it using

npm install

To rebuild it simply do:

node-gyp build

License

MIT

Comments
  • clarifications

    clarifications

    when the "second api" says it's similar to the net interface, it means it's a reliable stream, right? https://github.com/mafintosh/utp-native#socketonconnection-connection

    this doesn't mention how to do NAT hole punching, is there a module for that?

    opened by dominictarr 13
  • Help Please. Problem with UTP on VPS Ubuntu 18.04

    Help Please. Problem with UTP on VPS Ubuntu 18.04

    I am getting the following error.

    Error: invalid argument
        at Connection._connect (/mnt/sdb/svr/synchronos/node_modules/utp-native/lib/connection.js:197:11)
        at /mnt/sdb/svr/synchronos/node_modules/utp-native/lib/connection.js:189:10
        at processTicksAndRejections (node:internal/process/task_queues:82:21)
        at runNextTicks (node:internal/process/task_queues:63:3)
        at listOnTimeout (node:internal/timers:526:9)
        at processTimers (node:internal/timers:500:7) {
      code: 'EINVAL'
    }
    

    I am using WebTorrent to download an mp4 file. It all works well on my local Windows 10 machine and even my raspberry pi 4 (Ubuntu 20.04), but it fails on the VPS (Ubuntu 18.04). I am very new to network protocols in general. Can someone help me out?

    opened by juancwu 10
  • Error: UTP_ECONNRESET

    Error: UTP_ECONNRESET

    Hello @mafintosh,

    I am trying to use utp-native for a p2p file transfer application.

    I am testing with the following code:

    [Server]

    var utp = require('utp-native')
    
    var server = utp.createServer(function (socket) {
      socket.pipe(socket) // echo server
    })
    
    server.listen(10000, function () {
      console.log('server listen')
    })
    

    [Client]

    var utp = require('utp-native')
    var fs = require('fs')
    
    var socket = utp.connect(10000, '10.0.103.24') # where 10.0.103.24 is another host in my LAN
    
    var r = fs.createReadStream('/Users/jacopodaeli/Desktop/test1.mp4')
    var w = fs.createWriteStream('/Users/jacopodaeli/Desktop/test1.copy.mp4')
    
    r.pipe(socket)
    socket.pipe(w)
    

    Before the transfer is completed the server crash with Error: UTP_ECONNRESET.

    Any idea how can I solve it? As well, it seems quite slower than a normal TCP connection. Any idea?

    I am running these scripts with Node.js 4.2.4 on OSX El Capitan.

    Thanks in advance, Jacopo

    opened by JacopoDaeli 10
  • Closing UTP server takes a long time

    Closing UTP server takes a long time

    After setting up a server and performing 1 successful connection with it, as soon as that connection is ended and destroyed, I try to close the UTP server, and it just hangs for about 20 to 25 seconds before it finishes.

    I may have some UTP packets in the send buffer, but what are the expected amount of time taken for shutting down the UTP server since all connections have been destroyed.

    opened by CMCDragonkai 8
  • UncaughtReferenceError: require is not defined at Object ./node_modules/utp-native/Lib/binding.js

    UncaughtReferenceError: require is not defined at Object ./node_modules/utp-native/Lib/binding.js

    I installed utp-native:

    (base) [email protected]:~/webMatters/vueMatters/GGC$ yarn add utp-native
    yarn add v1.22.4
    $ npx npm-force-resolutions
    npx: installed 5 in 0.767s
    warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix    
    package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning,   
    remove package-lock.json.
    [1/4] Resolving packages...
    warning Resolution field "[email protected]" is incompatible with requested version "[email protected]"
    [2/4] Fetching packages...
    warning Pattern ["[email protected]~3001.0001.0000-dev-harmony-fb"] is trying to unpack in the same destination "/home/marco
    /.cache/yarn/v6/npm-esprima-fb-3001.1.0-dev-harmony-fb-b77d37abcd38ea0b77426bb8bc2922ce6b426411-integrity
    /node_modules/esprima-fb" as pattern ["[email protected]~3001.1.0-dev-harmony-fb"]. This could result in non-deterministic 
    behavior, skipping.
    warning Pattern ["[email protected]^2.2.1"] is trying to unpack in the same destination "/home/marco/.cache/yarn/v6/npm-utp-native-
    2.2.1-6d33feba04bfe49b368bad05555703f9728b6e63-integrity/node_modules/utp-native" as pattern ["[email protected]^2.1.7","utp-
    [email protected]^2.2.1"]. This could result in non-deterministic behavior, skipping.
    info [email protected]: The platform "linux" is incompatible with this module.
    info "[email protected]" is an optional dependency and failed compatibility check. Excluding it from installation.
    info [email protected]: The platform "linux" is incompatible with this module.
    info "[email protected]" is an optional dependency and failed compatibility check. Excluding it from installation.
    [3/4] Linking dependencies...
    warning " > [email protected]" has unmet peer dependency "[email protected] - 3".
    warning " > [email protected]" has unmet peer dependency "[email protected]^1.16.0".
    warning " > [email protected]" has unmet peer dependency "@gooddollar/[email protected]^0.*".
    warning " > [email protected]" has unmet peer dependency "[email protected]^4.0.1".
    warning " > [email protected]" has unmet peer dependency "[email protected]^5.0.2".
    warning "http-proxy-middleware > http-proxy > [email protected]" has unmet peer dependency "[email protected]^3.0.0 || ^4.0.0".
    warning " > [email protected]" has unmet peer dependency "[email protected]^6.5.4".
    warning "tiptap-extensions > [email protected]" has incorrect peer dependency "[email protected]^0.9.1".
    warning " > [email protected]" has unmet peer dependency "[email protected]^0.2.0".
    warning " > [email protected]" has unmet peer dependency "[email protected]^1.7.1".
    warning " > [email protected]" has unmet peer dependency "[email protected]^1.2.3".
    warning " > [email protected]" has unmet peer dependency "[email protected]^1.9.10".
    [4/4] Building fresh packages...
    success Saved 0 new dependencies.
    $ electron-builder install-app-deps
      • electron-builder  version=22.7.0
      • rebuilding native dependencies  [email protected], [email protected], [email protected],  
    [email protected], [email protected], [email protected], [email protected], [email protected], [email protected],  
    [email protected], [email protected], [email protected], [email protected], [email protected]
                                        platform=linux
                                        arch=x64
      • rebuilding native dependency  name=better-sqlite3 version=5.4.3
      • rebuilding native dependency  name=abstract-socket version=2.1.1
      • rebuilding native dependency  name=bufferutil version=4.0.1
      • rebuilding native dependency  name=canvas version=2.6.1
      • rebuilding native dependency  name=fd-lock version=1.1.1
      • rebuilding native dependency  name=integer version=2.1.0
      • rebuilding native dependency  name=sodium-native version=3.2.0
      • rebuilding native dependency  name=utf-8-validate version=5.0.2
      • rebuilding native dependency  name=utp-native version=2.2.1
      • rebuilding native dependency  name=websocket version=1.0.31
      • rebuilding native dependency  name=sodium-native version=2.4.9
      • rebuilding native dependency  name=sodium-native version=2.4.9
      • rebuilding native dependency  name=sodium-native version=2.4.9
      • rebuilding native dependency  name=sodium-native version=2.4.9
    Done in 46.38s.
    

    In UtpNative.vue file I put:

    <script>
    
        import utp from 'utp-native';
        const server = utp.createServer(function (socket) {
          socket.pipe(socket) // echo server
        })
    
        server.listen(10000, function () {
          const socket = utp.connect(10000)
    
          socket.write('hello world')
          socket.end()
    
          socket.on('data', function (data) {
            console.log('echo: ' + data)
          })
          socket.on('end', function () {
            console.log('echo: (ended)')
          })
        })
    

    But when running the app I get this errors message:

    "UncaughtReferenceError: require is not defined at Object ./node_modules/utp-native/Lib/binding.js"
    

    image

    Environment Info:
    
      System:
        OS: Linux 5.3 Ubuntu 18.04.4 LTS (Bionic Beaver)
        CPU: (8) x64 Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz
      Binaries:
        Node: 14.3.0 - ~/.nvm/versions/node/v14.3.0/bin/node
        Yarn: 1.22.4 - /usr/bin/yarn
        npm: 6.14.5 - ~/.nvm/versions/node/v14.3.0/bin/npm
      Browsers:
        Chrome: 84.0.4147.89
        Firefox: 78.0.2
      npmGlobalPackages:
        @vue/cli: 4.4.4
    

    How to solve the problem? Marco

    opened by marcoippolito 8
  • N-API warning

    N-API warning

    I think it's utp-native that triggers this message to stderr whenever I start a node app using it:

    (node:6215) Warning: N-API is an experimental feature and could change at any time.
    

    Is there a way to suppress this from this module?

    opened by hackergrrl 6
  • Uncaught Error [EINVAL]: Expected unsigned number

    Uncaught Error [EINVAL]: Expected unsigned number

    I'm getting the following error when using utp-native as a dependency

    Uncaught Error [EINVAL]: Expected unsigned number
          at Connection._connect (node_modules/utp-native/lib/connection.js:187:11)
          at UTP.connect (node_modules/utp-native/index.js:137:13)
          at Function.UTP.connect (node_modules/utp-native/index.js:45:14)
          at UTP.listener.listen (test/listen-dial.spec.js:43:33)
          at emitListening (node_modules/utp-native/index.js:248:8)
          at process._tickCallback (internal/process/next_tick.js:63:19)
    

    I followed the port all the way down and it is always a Number.

    Came to the repo to check if I could get the tests to pass and got a Error on install

     ⭠ master ⮀~/code/utp-native 
    » npm i && npm test
    npm WARN deprecated [email protected]: CircularJSON is in maintenance only, flatted is its successor.
    
    > [email protected] install /Users/imp/code/utp-native
    > node-gyp-build
    
    make: *** No rule to make target `Release/obj.target/libutp/deps/libutp/utp_internal.o', needed by `Release/utp.a'.  Stop.
    gyp ERR! build error
    gyp ERR! stack Error: `make` failed with exit code: 2
    gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:262:23)
    gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
    gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
    gyp ERR! System Darwin 18.2.0
    gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
    gyp ERR! cwd /Users/imp/code/utp-native
    gyp ERR! node -v v10.13.0
    gyp ERR! node-gyp -v v3.8.0
    gyp ERR! not ok
    npm ERR! code ELIFECYCLE
    npm ERR! errno 1
    npm ERR! [email protected] install: `node-gyp-build`
    npm ERR! Exit status 1
    npm ERR!
    npm ERR! Failed at the [email protected] install script.
    

    Looks like something changed on Node.js 10.13.0, just haven't been able to find exactly what. Any clue?

    opened by daviddias 5
  • timers.unenroll() deprecated

    timers.unenroll() deprecated

    Originally reported here https://github.com/cabal-club/cabal/issues/10

    Same goes for timers.enroll(). I don't really understand how this works so don't have any suggestion how to rewrite this. If you give me some pointers I could try and fix it.

    opened by ralphtheninja 3
  • failed to compile

    failed to compile

    uname -a: Linux instance-1 3.16.0-0.bpo.4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u3~bpo70+1 (2015-08-08) x86_64 GNU/Linux

    output

    # Pastebin GyiVKmYL
    p.node)
    prebuild info install We will now try to compile from source.
    make: Entering directory `/usr/local/lib/node_modules/hyperpipe/node_modules/hyperdrive-archive-swarm/node_modules/hybrid-swarm/node_modules/discovery-swarm/node_modules/utp-native/build'
      CXX(target) Release/obj.target/libutp/deps/libutp/utp_internal.o
    ../deps/libutp/utp_internal.cpp: In member function ‘void UTPSocket::send_data(byte*, size_t, bandwidth_type_t, uint32)’:
    ../deps/libutp/utp_internal.cpp:752:58: error: unable to find string literal operator ‘operator"" I64u’
    ../deps/libutp/utp_internal.cpp: In function ‘size_t utp_process_incoming(UTPSocket*, const byte*, size_t, bool)’:
    ../deps/libutp/utp_internal.cpp:1783:80: error: unable to find string literal operator ‘operator"" I64u’
    ../deps/libutp/utp_internal.cpp:1969:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    make: *** [Release/obj.target/libutp/deps/libutp/utp_internal.o] Error 1
    make: Leaving directory `/usr/local/lib/node_modules/hyperpipe/node_modules/hyperdrive-archive-swarm/node_modules/hybrid-swarm/node_modules/discovery-swarm/node_modules/utp-native/build'
    prebuild ERR! build error 
    prebuild ERR! stack Error: `make` failed with exit code: 2
    prebuild ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/hyperpipe/node_modules/hyperdrive-archive-swarm/node_modules/hybrid-swarm/node_modules/discovery-swarm/node_modules/utp-native/node_modules/prebuild/node_modules/node-gyp/lib/build.js:276:23)
    prebuild ERR! stack     at emitTwo (events.js:87:13)
    prebuild ERR! stack     at ChildProcess.emit (events.js:172:7)
    prebuild ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
    prebuild ERR! not ok 
    prebuild ERR! build Error: `make` failed with exit code: 2
    prebuild ERR! build     at ChildProcess.onExit (/usr/local/lib/node_modules/hyperpipe/node_modules/hyperdrive-archive-swarm/node_modules/hybrid-swarm/node_modules/discovery-swarm/node_modules/utp-native/node_modules/prebuild/node_modules/node-gyp/lib/build.js:276:23)
    prebuild ERR! build     at emitTwo (events.js:87:13)
    prebuild ERR! build     at ChildProcess.emit (events.js:172:7)
    prebuild ERR! build     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
    
    > [email protected] install /usr/local/lib/node_modules/hyperpipe/node_modules/hypercore/node_modules/sodium-signatures/node_modules/sodium-prebuilt
    > prebuild --install --preinstall make
    
    opened by maxogden 3
  • Error when building in a directory with spaces in it

    Error when building in a directory with spaces in it

    Hey, I'm getting this in OSX when I run a rebuild, in a directory with spaces in the path. In this case, the dir is /Users/paulfrazee/Library/Application Support/Beaker Browser/

    > [email protected] install /Users/paulfrazee/Library/Application Support/Beaker Browser/node_modules/utp-native
    > prebuild --install
    
      CXX(target) Release/obj.target/libutp/deps/libutp/utp_internal.o
    ../deps/libutp/utp_internal.cpp:1969:34: warning: comparison of integers of
          different signs: 'int' and 'uint32' (aka 'unsigned int') [-Wsign-compare]
                    if (conn->mtu_probe_seq && seq == conn->mtu_probe_seq) {
                                               ~~~ ^  ~~~~~~~~~~~~~~~~~~~
    1 warning generated.
      CXX(target) Release/obj.target/libutp/deps/libutp/utp_utils.o
      CXX(target) Release/obj.target/libutp/deps/libutp/utp_hash.o
      CXX(target) Release/obj.target/libutp/deps/libutp/utp_callbacks.o
      CXX(target) Release/obj.target/libutp/deps/libutp/utp_api.o
      CXX(target) Release/obj.target/libutp/deps/libutp/utp_packedsockaddr.o
      LIBTOOL-STATIC Release/utp.a
      CXX(target) Release/obj.target/utp/src/utp_uv.o
    clang: error: no such file or directory: 'Support/Beaker'
    clang: error: no such file or directory: 'Browser/node_modules/utp-native/deps/libutp'
    make: *** [Release/obj.target/utp/src/utp_uv.o] Error 1
    

    Somewhere, a clang command is invoked without quotes around the path. I scanned through the code but don't know enough about node-gyp to spot where (sorry, no PR).

    opened by pfrazee 3
  • Installing utp-native@1.7.3 fails building libutp against node -v v12.13.0

    Installing [email protected] fails building libutp against node -v v12.13.0

    ../src/socket_wrap.cc:99:45: error: no matching function for call to ‘v8::Value::ToObject()’
       99 |   Local<Object> context = info[0]->ToObject();
    

    ... and a few more newbies.

    
    gyp ERR! cwd /home/jbg/Development/hubdrive/node_modules/utp-native
    gyp ERR! node -v v12.13.0
    gyp ERR! node-gyp -v v6.0.0
    gyp ERR! not ok 
    
    opened by datafatmunger 2
  • Better debug options

    Better debug options

    Working on #42 it was very hard to figure out what was happening if something didn't work as expected. For example: one of my theory on #40 is with awkward timing, a connection may be closed just when fin-ack is sent, which may mean utp_call_on_state_change may never be executed, causing utp-native to wait until timeout until closed.

    The reason why I came this far is because I enabled libutp's debug mode and added a lot of print statements to the bindings, as well as adding an identifier to the connection so I could make sure in the log statements what operation caused a problem.

    Adding/Removing the log statements to find the cause of an error is stressful. Which is why I would like to propose to add debug support to the library itself so debugging can be easier.

    • Add an incrementing number to the utp and connection instances that is passed-on to the bindings which allows to figure out which connection is doing what in a command line.
    • Add debug statements to the Bindings that can be activated with a UTP_DEBUG_LOGGING compile time option.
    • Add debug statements to the Connection and UTP classes that also let know what happens when.
    • (Optional) Add debug builds of the binaries and load the debug builds if the debug.enabled is true instead of the production binaries.
    opened by martinheidegger 0
  • The `allowHalfOpen` doesn't seem to be working on the server

    The `allowHalfOpen` doesn't seem to be working on the server

    I've created a server like:

        const utpSocket = UTP.createServer(
          async (utpConn) => {
            utpConn.on('close', () => {
              console.log('CLOSED ON REMOTE SIDE');
            });
          },
          {
            allowHalfOpen: false
          }
        );
    

    Using the allowHalfOpen I'm expecting that the utpConn would be closed if the remote side has sent an end event. That is they closed their write side, ending my read side. Therefore I should have an automatic close of my write side, and that should trigger a close event.

    However that's not what is happening. Instead I get a UTPCONNRESET error.

    Error [ERR_UNHANDLED_ERROR]: Unhandled error. (Error: UTP_ECONNRESET
        at createUTPError (/home/cmcdragonkai/Projects/js-polykey/node_modules/utp-native/lib/connection.js:238:15)
        at Connection.Object.<anonymous>.Connection._onerror (/home/cmcdragonkai/Projects/js-polykey/node_modules/utp-native/lib/connection.js:175:16) {
      code: 'UTP_ECONNRESET',
      errno: 1
    })
        at Connection.emit (events.js:304:17)
        at Connection.Object.<anonymous>.Connection._onclose (/home/cmcdragonkai/Projects/js-polykey/node_modules/utp-native/lib/connection.js:169:25) {
      code: 'ERR_UNHANDLED_ERROR',
      context: Error: UTP_ECONNRESET
          at createUTPError (/home/cmcdragonkai/Projects/js-polykey/node_modules/utp-native/lib/connection.js:238:15)
          at Connection.Object.<anonymous>.Connection._onerror (/home/cmcdragonkai/Projects/js-polykey/node_modules/utp-native/lib/connection.js:175:16) {
        code: 'UTP_ECONNRESET',
        errno: 1
      }
    }
    

    To actually ensure that my side is being closed if this occurs, I have to attach my own event handler to the end:

            utpConn.on('end', () => {
              utpConn.end();
            });
    

    Only then does the connection actually close.

    opened by CMCDragonkai 9
  • Assertion error occasionally coming from the utp internal

    Assertion error occasionally coming from the utp internal

    I'm running some tests on utp-native, and I've noticed on some repeated invocations:

    node: ../deps/libutp/utp_internal.cpp:3405: void utp_shutdown(UTPSocket*, int): Assertion `conn' failed.
    

    If I wait a bit of time, and restart the tests, it works again.

    Seems to happen when I try to create a connection and then fail the connection and have to shutdown.

    It's weird that this error only occurs upon starting the program again. It appears like there is some state kept between program invocations.

    opened by CMCDragonkai 4
  • No native build on apple silicon m1

    No native build on apple silicon m1

    Hi,

    I'm getting this error:

    No native build was found for platform=linux arch=arm64 runtime=node abi=93 uv=1 armv=8 libc=glibc node=16.0.0 seeder_1 | loaded from: /app/webtorrent-pocp/node_modules/utp-native

    There is a version of this package running on arm64?

    opened by stefanodecillis 8
Releases(v2.5.3)
Owner
Mathias Buus
Rød grød med fløde
Mathias Buus
Visual Studio native debugger extension to help debug native applications using Mono.

Unity Mixed Callstack UnityMixedCallstack is a Visual Studio 2017/2019 extension to help debug native applications embedding Mono, like Unity. If you

Unity Technologies 83 Nov 28, 2022
LLVM bindings for Node.js/JavaScript/TypeScript

llvm-bindings LLVM bindings for Node.js/JavaScript/TypeScript Supported OS macOS Ubuntu Windows Supported LLVM methods listed in the TypeScript defini

ApsarasX 249 Nov 24, 2022
C# bindings for Sokol using Sokol's binding generator

C# bindings for Sokol using Sokol's binding generator

Michal Strehovský 27 Dec 1, 2022
Android Bindings for QuickJS, A fine little javascript engine.

quickjs-android quickjs-android 是 QuickJS JavaScript 引擎的 Android 接口框架,整体基于面向对象设计,提供了自动GC功能,使用简单。armeabi-v7a 的大小仅 350KB,是 Google V8 不错的替代品,启动速度比 V8 快,内

Wiki 115 Nov 14, 2022
Zig bindings for the excellent CRoaring library

Zig-Roaring This library implements Zig bindings for the CRoaring library. Naming Any C function that begins with roaring_bitmap_ is a method of the B

Justin Whear 4 Feb 23, 2022
Python bindings of silk codec.

Python silk module. --- pysilk --- APIs See test\test.py. import pysilk as m m.silkEncode(buf , 24000) m.silkDecode(buf , 24000) #the first param is b

DCZ_Yewen 16 Oct 11, 2022
rlua -- High level bindings between Rust and Lua

rlua -- High level bindings between Rust and Lua

Amethyst Foundation 1.4k Nov 26, 2022
Ziggified GLFW bindings with 100% API coverage, zero-fuss installation, cross compilation, and more.

mach/glfw - Ziggified GLFW bindings Ziggified GLFW bindings that Mach engine uses, with 100% API coverage, zero-fuss installation, cross compilation,

Hexops 194 Nov 24, 2022
Bindings, from the comfort and speed of C++ and without Qt.

KDBindings Bindings, from the comfort and speed of C++ and without Qt. From plain C++ you get: Signals + Slots. Properties templated on the contained

KDAB 194 Nov 28, 2022
hb-xlib bindings for Harbour language.

hb-xlib hb-xlib is a Harbour module providing bindings for the Xlib graphics library. This project is intended for people who want to start to program

Rafał Jopek 1 Feb 6, 2022
Capstone disassembly/disassembler framework: Core + bindings.

Capstone disassembly/disassembler framework: Core (Arm, Arm64, BPF, EVM, M68K, M680X, MOS65xx, Mips, PPC, RISCV, Sparc, SystemZ, TMS320C64x, Web Assembly, X86, X86_64, XCore) + bindings.

Capstone Engine 6k Dec 2, 2022
CppADCodeGen with an easy Eigen interface and Python bindings.

CppADCodeGenEigenPy CppADCodeGen with an easy Eigen interface and Python bindings. This project has been tested on Ubuntu 16.04, 18.04, and 20.04. It

Adam Heins 11 May 18, 2022
Node.js bindings for the Mathematical Expression Toolkit

ExprTk.js This is the Node.js bindings for ExprTk (Github) by @ArashPartow ExprTk.js supports both synchronous and asynchronous background execution o

Momtchil Momtchev 6 Jul 23, 2022
Golang bindings of Sciter: the Embeddable HTML/CSS/script engine for modern UI development

Go bindings for Sciter Check this page for other language bindings (Delphi / D / Go / .NET / Python / Rust). Attention The ownership of project is tra

Terra Informatica Software, Inc 2.5k Nov 26, 2022
a one header library for creating Lua bindings to C++

Description A C++ library for generating Lua bindings. Supported features: functions, constructors, inheritance, member functions, properties, standar

null 76 Aug 20, 2022
My TFLite-Elixir bindings

TFLite-Elixir [WIP] There are mainly two reasons why I write this library. Port has limited throughput. It would be easier and more flexible to make c

Cocoa 14 Sep 20, 2022
A fast base64 module for React Native

react-native-quick-base64 A native implementation of Base64 in C++ for React Native. 4x faster than base64-js on an iPhone 11 Pro.

Takuya Matsuyama 223 Nov 23, 2022
A Dart package to send native 💬 toasts on Windows. Based on WinToast.

desktoasts A Dart package to send native ?? toasts on Windows. Installation For Flutter dependencies: ... desktoasts: ^0.0.2 For Dart CLI here Sup

Hitesh Kumar Saini 37 Mar 7, 2022
Haxe native extension to read and write windows clipboard.

Haxe Clipboard This is a native library to read and write clipboard data from Haxe. It uses Ammer to generate bindings. Note: This is a Windows only l

Ludovic Bas 12 Nov 11, 2022