【问题标题】:Linux Socket (AF_UNIX) Connect() FailLinux 套接字 (AF_UNIX) Connect() 失败
【发布时间】:2016-08-11 16:55:02
【问题描述】:

这周我一直在学习 unix 套接字,但我对来自客户端应用程序的 connect() 调用有疑问。

connect() 函数调用是否阻塞。它会阻塞直到服务器应用程序创建自己的套接字,将其绑定到相同的地址并开始侦听传入的连接?

在我的客户中,我拥有的是

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;

我得到的是,

ankit@ankit-ThinkPad-W530:~/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

【问题讨论】:

    标签: c linux sockets


    【解决方案1】:

    connect()函数是否调用了BLOCKING[?]

    不适用于 UNIX 套接字。它可能会阻塞其他类型的套接字(例如 IP 套接字)。

    它会阻塞直到服务器应用程序创建自己的套接字,将其绑定到相同的地址并开始监听传入的连接?

    没有。您自己看到了 - 您收到“没有这样的文件或目录”错误!显然,它在返回该错误之前没有等待服务器。

    【讨论】:

    • 如果我确保客户端仅在服务器端代码调用 bind() 后才开始执行(因此地址路径文件将存在)怎么办?
    • 当然它也会阻塞 UNIX 套接字,但时间很短...... ;-)
    • @alk 据此推理,所有函数调用都是阻塞的,甚至是非阻塞的。
    • @Ankit 当然,如果客户端在服务器之后启动,那么您将不会收到“没有这样的文件或目录”错误。
    猜你喜欢
    • 2012-06-09
    • 2016-06-16
    • 1970-01-01
    • 2016-05-04
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多