如何在CGI程序中使用UNIX套接字
How to use a UNIX socket in a CGI program
我想为一个基于UNIX套接字的服务器接口的程序编写一个web接口,但是似乎不可能在CGI程序中成功连接到它。
我看了httpd.conf文件并搜索了web,但没有找到。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参考手册有一章
您的服务器创建没有'group'和'all'写入权限的套接字:srwxr_xr_x。所以将其更改为所有访问权限(chmod 777 ..)等)后,服务器创建管道。然后,我打赌,你的CGI程序将连接…: -)
在bind之后执行chmod。在c程序中,它看起来像这样:
if (bind(sockfd, (struct sockaddr *)&serv_addr, servlen) < 0) {
perror("Error binding socket:");
exit 1;
}
if (chmod(PipeName, 0777) == -1) {
perror("Error in chmod:");
exit 1;
}
相关文章:
- 用于通信C++的 UNIX 套接字
- SOCAT,将TCP套接字转发到Unix套接字,将recvmsg()更改为read(),删除辅助数据
- Unix 套接字挂在 recv 上,直到我在任何地方放置/删除断点
- 在 unix 套接字上调用async_connect有意义吗?
- Qt5 有没有办法让QLocalServer监听抽象的Unix套接字
- 使用UNIX套接字C++客户端与Node.js服务器通信的简单示例
- 如何以正确的方式读/写 UNIX 套接字
- 将Unix套接字移植到Windows
- C++ 在基于 UNIX 套接字的客户端程序中 connect() 不会建立与服务器的连接
- Unix 套接字循环
- 在同一 unix 套接字连接中读取元素两次时出错
- 关闭 Unix 套接字时内存损坏
- Unix套接字发送接收客户端到服务器大块数据错误
- 使用unix套接字获取本地ip地址
- 数据报Unix套接字上的ECONNREFUSED
- c++ Unix套接字捕获系统调用
- 通过本地UNIX套接字发送double
- 如何在CGI程序中使用UNIX套接字
- c++ Qt写unix套接字
- 使用UNIX套接字,了解如何在发送数据的同时等待数据