diff options
author | Ouyang Yadong <oyydoibh@gmail.com> | 2018-07-29 22:41:11 +0800 |
---|---|---|
committer | Matteo Collina <hello@matteocollina.com> | 2018-08-06 11:05:51 +0200 |
commit | 2bea9cefbc10ed1dd497bbae61c07d971da287dd (patch) | |
tree | 02bfcbc3fcf39fe7524f9271762617f23e107925 /test/parallel/test-dgram-create-socket-handle-fd.js | |
parent | 214844ea4e561b0f77e97643d28b251cdc574089 (diff) | |
download | android-node-v8-2bea9cefbc10ed1dd497bbae61c07d971da287dd.tar.gz android-node-v8-2bea9cefbc10ed1dd497bbae61c07d971da287dd.tar.bz2 android-node-v8-2bea9cefbc10ed1dd497bbae61c07d971da287dd.zip |
dgram: implement socket.bind({ fd })
dgram: Implement binding an existing `fd`. Allow pass a `fd` property
to `socket.bind()` in dgram.
src: Add `UDPWrap::Open`
PR-URL: https://github.com/nodejs/node/pull/21745
Fixes: https://github.com/nodejs/node/issues/14961
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'test/parallel/test-dgram-create-socket-handle-fd.js')
-rw-r--r-- | test/parallel/test-dgram-create-socket-handle-fd.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/test/parallel/test-dgram-create-socket-handle-fd.js b/test/parallel/test-dgram-create-socket-handle-fd.js new file mode 100644 index 0000000000..ff507b6ec5 --- /dev/null +++ b/test/parallel/test-dgram-create-socket-handle-fd.js @@ -0,0 +1,42 @@ +'use strict'; +const common = require('../common'); +if (common.isWindows) + common.skip('Does not support binding fd on Windows'); + +const assert = require('assert'); +const dgram = require('dgram'); +const { UDP } = process.binding('udp_wrap'); +const { TCP, constants } = process.binding('tcp_wrap'); +const _createSocketHandle = dgram._createSocketHandle; + +// Return a negative number if the "existing fd" is invalid. +{ + const err = _createSocketHandle(common.localhostIPv4, 0, 'udp4', 42); + assert(err < 0); +} + +// Return a negative number if the type of fd is not "UDP". +{ + // Create a handle with fd. + const rawHandle = new UDP(); + const err = rawHandle.bind(common.localhostIPv4, 0, 0); + assert(err >= 0, String(err)); + assert.notStrictEqual(rawHandle.fd, -1); + + const handle = _createSocketHandle(null, 0, 'udp4', rawHandle.fd); + assert(handle instanceof UDP); + assert.strictEqual(typeof handle.fd, 'number'); + assert(handle.fd > 0); +} + +// Create a bound handle. +{ + const rawHandle = new TCP(constants.SOCKET); + const err = rawHandle.listen(); + assert(err >= 0, String(err)); + assert.notStrictEqual(rawHandle.fd, -1); + + const handle = _createSocketHandle(null, 0, 'udp4', rawHandle.fd); + assert(handle < 0); + rawHandle.close(); +} |