这是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);
答案 0 :(得分:1)
您需要使用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
的{{1}}成员比struct sockaddr_un
字符小得多,因此,套接字inode应该位于何处受到了限制。
很明显,您没有使用PATH_MAX
-fopen()
的意思是“文件”。