WinSock2无法连接简易服务器,出现10038错误求助
Windows网络编程10038错误(WSAENOTSOCK)排查与修复
10038错误对应WSAENOTSOCK,含义是你尝试对一个非套接字对象执行套接字操作。
问题根源
你的代码中,创建套接字的if语句存在运算符优先级错误:
if (connect_socket = socket(AF_INET, SOCK_STREAM, 0) == INVALID_SOCKET) {
由于==的优先级高于=,这段代码会先执行socket(...) == INVALID_SOCKET,得到布尔值(0或1),再将该值赋值给connect_socket。这导致connect_socket并不是socket()返回的有效套接字句柄,而是一个普通整数,后续调用connect()时自然触发10038错误。
修复代码
给赋值操作加上括号,确保先完成套接字创建与赋值,再进行有效性判断:
if ((connect_socket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { printf("Could not create socket : %d\n", WSAGetLastError()); return -1; }
额外提示
inet_addr()在处理无效IP时会返回INADDR_NONE,建议后续代码中增加对该返回值的检查,避免传入错误的服务器地址。
内容的提问来源于stack exchange,提问作者user9609349
相关产品推荐
相关产品推荐

