[英]WinSock2 cant connect to simple server
我正在使用 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"
如果 (connect_socket = socket(AF_.NET, 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
進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.