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

最近同事在测试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");

上一篇:串口大师提示找不到串口的解决办法,增加注册表项目。


下一篇:安装Exchange2010的详细步骤