我正在使用 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;
nslookup www.google.com -> “142.250.184.196”在嘗試運行程式時列印:“Initialising Winsock...Initialised.Socket created.connect error : 10038”
uj5u.com熱心網友回復:
如果 (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:
WSAENOTSOCK
10038
非套接字上的套接字操作。嘗試對不是套接字的物件進行操作。套接字句柄引數未參考有效套接字,或者對于 select,fd_set 的成員無效。
要解決此問題,請先分配給connect_socket,然后與 進行比較INVALID_SOCKET。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/536610.html
上一篇:C堆環境變數
下一篇:C中scanf的多個條件
