C - 连接功能 - 无效的参数错误

时间:2014-11-06 20:23:06

标签: c sockets unix

我正在编写一个C程序,通过套接字在两个进程之间进行通信,并且我在连接函数调用时遇到以下错误。

  

connect ::无效参数

连接电话中我错过了什么? 任何帮助都会很棒!

这是我的代码 -

void conn(char *hname)
{
    struct hostent *hp;
    struct sockaddr_in sin;
    int port = 10000;
    int s, rc;

    hp = gethostbyname(hname);
    if ( hp == NULL ) {
        fprintf(stderr, "host not found (%s)\n", hname);
        exit(1);
    }

    s = socket(AF_INET, SOCK_STREAM, 0);
    if ( s < 0 ) {
        perror("socket:");
        exit(left);
    }

    sin.sin_family = AF_INET;
    sin.sin_port = htons(port);
    memcpy(&sin.sin_addr, hp->h_addr_list[0], hp->h_length);

    rc = connect(s, (struct sockaddr *)&sin, sizeof(sin));
    if ( rc < 0 ) {
        perror("connect:");
        exit(rc);
    }
}

1 个答案:

答案 0 :(得分:4)

应将

struct sockaddr_in个实例初始化为零,例如,

struct sockaddr_in sin;
memset(&sin, '\0', sizeof(sin));

在Linux上,调用errno失败后,connect(2)的EINVAL不是可能的值。您使用的是哪种操作系统?

此外,socket的第一个参数是协议族。从历史上看,在BSD上,您将使用的常量 PF_INET 而不是AF_INET。在实践中它们是相同的值,并且看起来至少在RHEL 6中确实只有一个常数。但如果您使用的是BSD-ish系统,则应该使用PF_INET。