libpq IPV6的link-local地址连接问题及解决方法

简介: 最近同事在测试PostgreSQL C库libpq的IPV6时,使用了fe80的本地链接地址fe80::250:56ff:fe8d:6927(本机地址),结果报下面的错误:Invalid argument 后来知道link-local地址需要指定网卡设备,于是在IPV6地址后面加上"%eth0"就可以了。
最近同事在测试PostgreSQL C库libpq的IPV6时,使用了fe80的本地链接地址fe80::250:56ff:fe8d:6927(本机地址),结果报下面的错误:
Invalid argument

后来知道link-local地址需要指定网卡设备,于是在IPV6地址后面加上"%eth0"就可以了。

  1. conn = PQconnectdb("host=fe80::250:56ff:fe8d:6927%eth0 port=5432 dbname=postgres");

上面是Key Value形式连接字符串,使用下面的URL形式的连字符串时,仍然失败。

  1. conn = PQconnectdb("postgresql://postgres@[fe80::250:56ff:fe8d:6927%eth0]:5432/postgres");
报错:
invalid percent-encoded token: "fe80::250:56ff:fe8d:6927%eth0"

查了下libpq源码,原来 "%"是URL的中的转义字符,libpq遇到"%"时按照URL的 编码规则进行解码,发现"%"后面的格式不对于是报错。
于是按照URL的编码规则改成下面的样子,就可以了。

  1. conn = PQconnectdb("postgresql://postgres@[fe80::250:56ff:fe8d:6927%25eth0]:5432/postgres");

相关文章
|
11月前
|
关系型数据库 MySQL Apache
Service Apache can not start. Reason:(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一-次。: AH00072: make_ sock
Service Apache can not start. Reason:(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一-次。: AH00072: make_ sock
142 0
|
运维 网络协议 安全
CPP:IP 连接配置文件
本文档描述了连接配置文件 (Connectivity Provisioning Profile,CPP) 并提出了一个 CPP 模板来捕获要在服务交付环境(例如,IP 语音或 IP 电视)内满足的 IP/MPLS 连接要求。CPP 定义了底层传输网络支持的 IP 传输参数集以及可达性范围和带宽/容量需求。适当的性能指标,例如单向延迟或单向延迟变化,用于表征 IP 传输服务。全局和受限可达性范围都可以在 CPP 中捕获。
211 0
CPP:IP 连接配置文件
|
网络协议 关系型数据库 MySQL
MySql解决办法:2004:Can't create TCP/IP socket (24)
MySql解决办法:2004:Can't create TCP/IP socket (24)
249 0
|
缓存 网络协议 Linux
Linux Command arp 地址转换协议
Linux Command arp 地址转换协议
|
网络协议 Linux .NET
使用.NetCore在Linux上写TCP listen 重启后无法绑定地址
拥抱.net core的过程中, 将公司的一套java项目改成了.net core 2.0版的. 里面的tcp服务被我用msdn的SocketAsyncEventArgs方式重写了, 然而在测试的过程中发现, 偶尔会出现重启无法再次绑定监听的情况.
1636 0