2014-06-13 37 views
0

我正在写一个简单的UDP客户端,并将错误作为“无效参数”返回,但我不知道错在哪里。它在linux上编译。我的代码如下。c connect()错误 - 无效参数

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; 
} 
+0

它在Linux上编译,我不知道是否是时间错误。我如何检查? – user3085926

+0

编译器说什么?你使用什么编译器?你可以粘贴'gcc -Wall yourclient.c'的结果吗? – DrakaSAN

+3

我刚刚试过这段代码,它是一个运行时错误,connect()失败,因为套接字的类型是AF_PPPOX。我试着用AF_INET,它工作正常。我认为AF_PPPOX套接字必须以不同的方式处理。 –

回答

3

您使用的是AF_INET地址与AF_PPPoX插座。这是混合苹果和长尾小鹦鹉。

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