最近同事在测试PostgreSQL C库libpq的IPV6时,使用了fe80的本地链接地址fe80::250:56ff:fe8d:6927(本机地址),结果报下面的错误:
Invalid argument
后来知道link-local地址需要指定网卡设备,于是在IPV6地址后面加上"%eth0"就可以了。
-
conn = PQconnectdb("host=fe80::250:56ff:fe8d:6927%eth0 port=5432 dbname=postgres");
上面是Key Value形式连接字符串,使用下面的URL形式的连字符串时,仍然失败。
-
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的编码规则改成下面的样子,就可以了。
-
conn = PQconnectdb("postgresql://postgres@[fe80::250:56ff:fe8d:6927%25eth0]:5432/postgres");
阅读(3625) | 评论(0) | 转发(0) |