c - c语言通过指定文件连接客户端socket
问题描述
这是来自MBDyn教程的 python 套接字连接代码。
# create input socket (2 double: x, x_prime)
s_in = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM);
s_in.connect("./mbdyn.body.sock");
s_in_bufsize = 2*8
# create output socket (1 double: f)
s_out = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM);
s_out.connect("./mbdyn.spring.sock");
s_out_bufsize = 8
我想了解如何使用
s_out.connect("./mbdyn.spring.sock");
也可以在 c 代码中连接文件。
connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr))
如何在上述c
样式代码中指定像 python 一样充当套接字的文件?
解决方案会像
sock = fopen(...);//socket(AF_INET, SOCK_STREAM, 0);
解决方案
而不是AF_INET
,您需要使用AF_UNIX
,就像在您的 Python 代码中一样。您的系统可能有一个手册页unix
,包括示例。我的包括以下内容(释义:我省略了错误检查):
struct sockaddr_un name; memset(&name, 0, sizeof name); /* Bind socket to socket name. */ name.sun_family = AF_UNIX; strncpy(name.sun_path, SOCKET_NAME, sizeof name.sun_path - 1); bind(connection_socket, (const struct sockaddr*)&name, sizeof name);
请注意,sun_path
成员struct sockaddr_un
比字符小得多PATH_MAX
,因此您受限于套接字 inode 应位于的位置。
显然你不使用fopen()
-f
意思是“文件”。
推荐阅读
- cryptography - 使用 Palisade 库的同态加密
- unit-testing - 在没有实际数据库调用的情况下在具有 N 层的 Web api 中进行单元测试
- google-cloud-platform - 如何以编程方式将角色添加到云构建服务帐户?
- azure - 天蓝色管道 cron 未运行
- excel - 在 vba 中,“On Error GoTo”语句不起作用。编译器在语句后给出错误
- sql - 如何获取日期范围之间的所有日期(包括 start_date 和 end_date)
- c# - 是否有可能在源代码中抑制 sonarcloud 的警告?
- excel - 字符串中的通配符
- docker - 为什么dockerfile中的添加或复制命令不添加新文件
- jenkins - 在 Jenkins 管道中运行并行 kubernetes 作业