我正在编写一个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);
}
}
答案 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。