我正在使用C学习在windows上的联网,我得到了这个奇怪的10038错误
WSADATA wsa;
SOCKET connect_socket;
printf("Initialising Winsock...");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
printf("Failed. Error Code : %d", WSAGetLastError());
return 1;
}printf("Initialised.\n");
if (connect_socket = socket(AF_INET, SOCK_STREAM, 0) == INVALID_SOCKET) {
printf("Could not create socket : %d\n", WSAGetLastError());
return -1;
}
printf("Socket created.\n");
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(80);
server.sin_addr.s_addr = inet_addr("142.250.184.196");
if (connect(connect_socket, (struct sockaddr*)&server, sizeof(server)) != 0)
{
printf("connect error : %d\n", WSAGetLastError());
return 1;
}
printf("Connected\n");
return 0;
在尝试运行程序打印时,查找www.google.com -> "142.250.184.196“:”初始化Winsock...Initialised. Socket创建.连接错误: 10038“
发布于 2022-11-20 14:36:57
if (connect_socket = socket(AF_INET,SOCK_STREAM,0) == INVALID_SOCKET) {
基于运算符优先在C中,这意味着
connect_socket = (socket(AF_INET, SOCK_STREAM, 0) == INVALID_SOCKET)
因此,connect_socket
不是实际的套接字,而是检查套接字是否有效的结果。假设套接字创建有效,那么connect_socket
将是假的,即0
。
由于0不是有效的TCP套接字,所以connect
将在错误10038中失败。
黄种人 10038 非套接字上的套接字操作。尝试对不是套接字的东西进行操作。套接字句柄参数没有引用有效的套接字,或者对于select,fd_set的成员无效。
要解决这个问题,首先分配给connect_socket
,然后与INVALID_SOCKET
进行比较。
https://stackoverflow.com/questions/74508894
复制相似问题