bind()返回EINVAL

时间:2019-05-12 15:01:49

标签: sockets bind

这是代码段(来自beejus),在这里我试图创建一个进程,该进程将创建一个将用作Unix Domain Socket Server的线程。

    void *domain_socket_cepki_server() {

    s = socket(AF_UNIX, SOCK_STREAM, 0);
    fprintf(stderr, "socket val is : %d\n", s);
    if (s == -1) {
       perror("socket");
       fprintf(stderr, "SOCKET ERROR: %d\n", s);
    }

    memset(&local, 0, sizeof(struct sockaddr_un));

    local.sun_family = AF_UNIX;
    strcpy(local.sun_path, SOCK_PATH);
    unlink(local.sun_path);
    //len = strlen(local.sun_path) + sizeof(local.sun_family);

    rc = bind(s, (struct sockaddr *) &local, sizeof(local));
    if (rc == -1) {
       perror("bind");
       fprintf(stderr, "bind failed %d : %s", errno, strerror(errno));
       exit(1);
    }

    if (listen(s, 5) == -1) {
       perror("listen");
       fprintf(stderr, "listen failed : %s", strerror(errno));
       exit(1);
    }

    int done, n;
    printf("Waiting for a connection...\n");
    t = sizeof(remote);
    if ((s2 = accept(s, (struct sockaddr *)&remote, &t)) == -1) {
        perror("accept");
        exit(1);
    }

    // send and recv code further.
    }

与此有关,我得到以下错误: 绑定:无效参数

bind()EINVAL表示以下内容:

  

EINVAL套接字已经绑定到一个地址。

     

EINVAL addrlen错误,或者addr对此无效                套接字的域。

此bind()系统调用会出什么问题吗?

0 个答案:

没有答案