socket.bindSync([options])
options<Object>port<integer> 如果省略或填写0,操作系统将分配一个任意未使用的端口。默认值:0。address<string> 要绑定的数字IP地址。与socket.bind()不同,不会进行DNS解析,因此不接受主机名。如果省略,操作系统会绑定到所有地址(udp4套接字使用'0.0.0.0',udp6使用'::')。
- 返回:<Object> 由
socket.address()返回的绑定地址。
socket.bind()的同步对应版本。bind(2)是一个本地的、非阻塞的系统调用,所以绑定操作是即时执行的,并且解析后的地址会立即返回,包括当port为0时操作系统分配的临时端口:
🌐 The synchronous counterpart of socket.bind(). bind(2) is a local,
non-blocking system call, so the bind is performed inline and the resolved
address is returned immediately, including the operating-system-assigned
ephemeral port when port is 0:
const dgram = require('node:dgram');
const socket = dgram.createSocket('udp4');
const address = socket.bindSync({ address: '0.0.0.0', port: 0 });
console.log(address); // e.g. { address: '0.0.0.0', family: 'IPv4', port: 53124 } 像 EADDRINUSE 这样的绑定失败会同步抛出,而不是作为 'error' 事件发出。在 bindSync() 返回后,socket.address() 会同步有效,并且 'listening' 事件会在下一个时刻被触发。
🌐 A bind failure such as EADDRINUSE is thrown synchronously rather than emitted
as an 'error' event. After bindSync() returns, socket.address() is
valid synchronously and the 'listening' event is emitted on the next tick.
address 必须是数字 IP 字面量;bindSync() 从不执行 DNS 解析(异步名称解析是绑定中唯一真正会阻塞的部分)。传入的数据报仍然通过 'message' 事件异步传递。bindSync() 总是绑定套接字自身的句柄,并且不参与 cluster 句柄共享。