gpt4 book ai didi

C - 连接函数 - 无效参数错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:03 26 4
gpt4 key购买 nike

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

connect:: Invalid argument

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

这是我的代码-

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);
}
}

最佳答案

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

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

您使用的是哪个操作系统?在 Linux 上,EINVAL 不是 connect(2) 调用失败后 errno记录值,但是, 检查 linux 内核中的 TCP 和 UDP 源代码发现了几种返回 EINVAL 的情况,通常是因为参数值无效。

此外,socket 的第一个参数是协议(protocol)族。从历史上看,在 BSD 上,您将在那里使用的常量是 PF_INET 而不是 AF_INET。实际上,它们是相同的值,而且看起来至少在 RHEL 6 中真的只有一个常量了。但是如果你在 BSD-ish 系统上,你可能应该使用 PF_INET。

关于C - 连接函数 - 无效参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26788715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com