使用InetPton()函数出现无效IP地址错误的技术求助
Windows Socket编程InetPton调用错误解决
问题原因分析
你遇到的错误码10022(WSAEINVAL)是因为InetPton函数的第三个参数传入错误。当前代码中传递的是&servaddr.sin_addr.S_un.S_addr,不符合函数参数要求,导致参数无效,返回值0(实际是参数类型不匹配引发的错误,并非IP地址格式本身问题)。
代码修正
将InetPton的调用修改为:
int a = InetPton(AF_INET, IPADDRESS, &servaddr.sin_addr);
参数说明
InetPton函数的第三个参数需要传入指向in_addr结构体的指针,而非结构体内部的S_addr成员地址:
servaddr.sin_addr是in_addr类型的结构体,&servaddr.sin_addr完全符合函数要求的指针类型- 若传递
&servaddr.sin_addr.S_un.S_addr,相当于传入unsigned long*类型指针,但函数期望的是struct in_addr*,类型不匹配直接触发无效参数错误
额外注意点
- 确保
IPADDRESS是合法的IPv4格式(如"192.168.1.1"),虽然当前问题核心是参数传递,但IP格式错误也会导致InetPton返回0 - 调用
WSAStartup初始化后,程序结束前记得调用WSACleanup()释放套接字资源 - 你的HTTP请求格式不完整,正确的GET请求至少需要包含
Host头部,否则服务器可能返回错误,示例修正:sprintf(sendl, "GET / HTTP/1.1\r\nHost: xxx.xxx.xx.xx\r\n\r\n");
内容的提问来源于stack exchange,提问作者NWA_fan
相关产品推荐
相关产品推荐

