c++ - 如何在 CGI 程序中使用 UNIX 套接字

标签 c++ linux sockets cgi

我想为具有基于 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/

相关文章:

c - 在 C 语言中使用 HTTP 从嵌入式系统传输文件

node.js - Nginx socket io websockets proxy pass

c++ - 使用非阻塞套接字。 errno 在调用 recvfrom 后总是 EAGAIN

c++ - 这两个查找回文的函数之间的区别

javascript - Websockets 使用 asio c++ 库作为服务器和 javascript 作为客户端

C++ 链接器错误 OSX Mavericks

linux - sudo -H 带大括号

c++ - 为什么我需要外部?

linux - 向匹配模式的行添加行计数器

linux - 有没有一本书讲述一些命令如 "ls"如何与 linux 内核一起工作