当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js dgram.Socket.setMulticastInterface(multicastInterface)用法及代码示例


socket.setMulticastInterface(multicastInterface)

添加于:v8.6.0

参数

本节中对范围的所有引用均指的是由 RFC 4007 定义的 IPv6 Zone Indices 。在字符串形式中,具有范围索引的 IP 写为'IP%scope',其中范围是接口名称或接口编号。

将套接字的默认传出多播接口设置为所选接口或返回系统接口选择。 multicastInterface 必须是来自套接字系列的 IP 的有效字符串表示形式。

对于 IPv4 套接字,这应该是为所需物理接口配置的 IP。所有在套接字上发送到多播的数据包都将在最近一次成功使用此调用所确定的接口上发送。

对于 IPv6 套接字,multicastInterface 应该包括一个范围来指示接口,如下面的示例所示。在 IPv6 中,单独的 send 调用也可以在地址中使用显式范围,因此只有发送到多播地址而不指定显式范围的数据包才会受到最近成功使用此调用的影响。

如果在未绑定的套接字上调用此方法,则会抛出 EBADF

示例:IPv6 传出多播接口#

在大多数系统上,范围格式使用接口名称:

const socket = dgram.createSocket('udp6');

socket.bind(1234, () => {
  socket.setMulticastInterface('::%eth1');
});

在 Windows 上,范围格式使用接口编号:

const socket = dgram.createSocket('udp6');

socket.bind(1234, () => {
  socket.setMulticastInterface('::%2');
});

示例:IPv4 传出多播接口#

所有系统都在所需的物理接口上使用主机的 IP:

const socket = dgram.createSocket('udp4');

socket.bind(1234, () => {
  socket.setMulticastInterface('10.0.0.2');
});

调用结果#

对尚未准备好发送或不再打开的套接字的调用可能会引发 Not running Error

如果 multicastInterface 无法解析为 IP,则抛出 EINVAL System Error

在 IPv4 上,如果 multicastInterface 是有效地址但不匹配任何接口,或者如果地址不匹配系列,则抛出 System Error ,例如 EADDRNOTAVAILEPROTONOSUP

在 IPv6 上,大多数指定或省略范围的错误将导致套接字继续使用(或返回)系统的默认接口选择。

套接字的地址族的 ANY 地址(IPv4 '0.0.0.0' 或 IPv6 '::')可用于将套接字默认传出接口的控制权返回给系统,以供将来的多播数据包使用。

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 dgram.Socket.setMulticastInterface(multicastInterface)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。