我想为具有基于 UNIX 套接字的服务器接口(interface)的程序编写 Web 接口(interface),但似乎无法在 CGI 程序中成功连接到它。
我查看了 httpd.conf 文件并在网上搜索,但没有找到任何结果。 CGI程序是用C++编写的。 UNIX 套接字位于 httpd 服务器允许的路径中。
最佳答案
要作为客户端连接到 unix 本地套接字,您首先要创建一个匿名套接字,例如对于 TCP:
int fd = socket(AF_LOCAL, SOCK_STREAM, 0);
然后您使用目标路径创建一个适当的struct sockaddr_un
:
struct sockaddr_un addr;
addr.sun_family = AF_LOCAL;
strcpy(addr.sun_path, "/path/to/server/socket/file");
然后调用connect()
:
connect(fd, (struct sockaddr*)&addr, sizeof(addr));
但是,这在手册页和在线文档中都有大量记录。除非使用第三方库,否则没有特定于 C++ 的方法;这些是标准 C 的 *nix 特定扩展:
#include <arpa/inet.h>
#include <netinet/ip.h>
#include <sys/socket.h>
#include <sys/types.h>
GNU C 引用手册 has a chapter .
关于c++ - 如何在 CGI 程序中使用 UNIX 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24980189/