针对IPv6地址的TLSSocket bind操作无响应?

socket.TLSSocket类,在bind IPv6类型的地址时,没有成功或者失败回调。

关键代码:

this.socket = socket.constructTLSSocketInstance();
connection.getDefaultNet().then((netHandle) => {
  connection.getConnectionProperties(netHandle, (error, info) => {
    if (!error) {
      let ip = info.linkAddresses[0].address.address;
      if (TsUtils.isIPv6(this.host)) {
        const ipv6Addresses = info.linkAddresses.filter((lAddr) => lAddr.address.family === 2);
        if (ipv6Addresses.length <= 0) {
          this.dealFailResult({
            code: -1,
            message: 'IPv6 not support',
            name: 'IPv6 not support'
          })
          return;
        }
        ip = `[${ipv6Addresses[0].address.address}]`;
      }
      logI.d(`socket bind ${ip}`);
      this.socket.bind({ address: ip, family: TsUtils.isIPv6(ip) ? 2 : 1 }, err => {
        // 这里不会执行,bind没有响应
        if (err) {
          this.dealFailResult(err);
          return;
        }
        logI.d(`bind ${ip} success`)
        callback();
      });
    }
    else {
      this.dealFailResult(error);
    }
  });
})
阅读 553
1 个回答

bind可以绑定ipv6的地址,参考如下demo:

bind_test() {
  let tlsClient = socket.constructTLSSocketInstance();
  connection.getDefaultNet().then((netHandle) => {
    connection.getConnectionProperties(netHandle, (error, info) => {
      if (!error) {
        console.warn('info = ', JSON.stringify(info));
        let ip = '';
        for (let index = 0; index < info.linkAddresses.length; index++) {
          if (info.linkAddresses[index].address.family === 2) {
            ip = info.linkAddresses[index].address.address;
            console.warn('ip = ', ip);
            tlsClient.bind({ address: ip, family: 2 }, err => {
              if (err) {
                console.log('bind fail, error = ', JSON.stringify(err));
                return;
              }
              console.log('bind success');
            });
          }
        }
      } else {
        console.warn('err = ', JSON.stringify(error));
      }
    });
  })
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进