最近使用Libcurl访问unix socket,在代码里像这样设置opt:
C
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/config/get_by_domain?domain=user");
curl_easy_setopt(curl, CURLOPT_UNIX_SOCKET_PATH, "/data/dogx/dogx.sock");
1
2
curl_easy_setopt(curl,CURLOPT_URL,"http://localhost/config/get_by_domain?domain=user");
curl_easy_setopt(curl,CURLOPT_UNIX_SOCKET_PATH,"/data/dogx/dogx.sock");
通过CURLOPT_UNIX_SOCKET_PATH来设置unix socket的路径,域名用localhost占位即可,实际上libcurl会忽略它。
一开始上线发现调用都失败,很快就怀疑到libcurl版本太低,发现CURLOPT_UNIX_SOCKET_PATH在低版本中并不支持(官方文档):
Shell
AVAILABILITY
Since 7.40.0.
1
2
3
AVAILABILITY
Since7.40.0.
在这种情况下,相当于curl_easy_setopt并没有实现对CURLOPT_UNIX_SOCKET_PATH选项的支持,所以这个调用相当于无效,最终会请求到localhost,也就是127.0.0.