【问题标题】:c connect() error - invalid argumentc connect() 错误 - 无效参数
【发布时间】:2014-06-13 17:56:02
【问题描述】:

我正在编写一个简单的 UDP 客户端,错误返回为“无效参数”,但我不知道出了什么问题。它是在linux上编译的。我的代码如下。

int udp_fd = -1;
struct sockaddr_in addr;
int port = 1701;

udp_fd = socket(AF_PPPOX, SOCK_DGRAM, 0);
if (udp_fd < 0) {
    printf("fail to get UDP socket\n");
    return 0;
}

memset((char *) &addr, 0, sizeof(struct sockaddr_in));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("31.25.210.118");
addr.sin_port = htons(port);

if(connect(udp_fd, (struct sockaddr *)&addr, sizeof(addr)) < 0 ) {
    printf("UDP connect failed, errno = %s\n", strerror(errno));
    return 0;
}

【问题讨论】:

  • 是linux编译的,不知道是不是时间错误。如何检查?
  • 编译器有没有说什么?你用什么编译器?你能粘贴gcc -Wall yourclient.c的结果吗?
  • 我刚刚尝试了这段代码,这是一个运行时错误,connect() 失败“因为”套接字的类型是 AF_PPPOX。我尝试使用 AF_INET,它工作正常。我认为 AF_PPPOX 套接字必须以不同的方式处理。

标签: c sockets connect


【解决方案1】:

您正在使用带有AF_PPPoX 套接字的AF_INET 地址。这是混合苹果和鹦鹉。

PPP代表“点对点”,在这个域中没有IP地址之类的东西。选择你的游戏。您可以通过 Internet 连接并使用 socket(AF_INET, ...,或者通过 PPP 连接并使用 PPP 协议之一,例如 PX_PROTO_OLACPX_PROTO_OPNS,以及相应的套接字地址类型(sockaddr_pppolacsockaddr_pppopns),而不是sockaddr_in.

【讨论】:

    猜你喜欢
    • 2018-06-29
    • 2019-12-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多