В эту недельную неделю я узнал о сокетах unix, и у меня есть вопрос о вызове connect() из клиентского приложения.Linux Socket (AF_UNIX) Connect() Fail
Является ли вызов функции connect() BLOCKING. Будет ли он BLOCK до тех пор, пока серверное приложение не создаст свой собственный сокет, привяжет его к тому же адресу и начнет прослушивать входящие соединения?
В моем клиенте, то, что у меня есть
printf(" abc %s\n", bind_path);
if((retval = connect(sh->sock_fd, (const struct sockaddr*)&sadr, sizeof(struct sockaddr_un))) == -1)
{
perror("123");
return SOCKET_ERROR;
}
return SOCKET_OK;
И что я получаю,
[email protected]:~/Desktop/week2_3_tasks/ipc_socket_exercise$ ./user_application_proc2_client.out
**** Process 2 (Client) Started
**** Process 2 PID : 7106
/tmp/sock_10
**** Socket connected successfully with handle 3
abc /tmp/sock_10
123: No such file or directory
**** Error connnecting socket to address .. exiting
Что делать, если клиент запускает выполнение только после того, как код на стороне сервера вызвал bind() (и, следовательно, файл пути адреса будет существовать)? – Ankit
Уверен, что он будет блокировать и для UNIX-сокетов, но только на очень короткое время ... ;-) – alk
@alk По этой причине все вызовы функций блокируют, даже неблокирующие. – immibis