Клиентское сокетное соединение через указанный файл на языке c - PullRequest
0 голосов
/ 12 ноября 2018

Это код подключения к сокету Python из MBDyn руководства.

# 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, который действует как сокет подобно питону?

Будет ли решение что-то вроде

sock = fopen(...);//socket(AF_INET, SOCK_STREAM, 0);

1 Ответ

0 голосов
/ 12 ноября 2018

Вместо 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 означает «файл».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...