windows端C++UDP多线程编程,recvfrom函数不能阻塞,第一次报错0,之后一直报错10038,如何解决?

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

下面是接收端的代码,发送端只有循环发送

#include<Winsock2.h>
#include<iostream>
#include<string>
#include<fstream>
#include<WinSock2.h>
#include<Windows.h>

#pragma comment(lib,"ws2_32.lib")
using namespace std;
///////////////////////////////////////////////////////
    WSADATA wsd;    // 初始化Socket的变量
    SOCKET s;        // 用于通信的Socket句柄
    SOCKADDR_IN sRecvAddr,sSendAddr;    // 分别为接收地址和发送地址
    USHORT uPort = 1401;                // 通信端口
    int nResult = 0,nSenderAddrSize = sizeof(sSendAddr);
///////////////////////////////////////////////////////
char recvBuf[1024]={0};
int recvlen=1024;
bool SEND=false;
///////////////////////////////////////////////////////

DWORD WINAPI recvThread(LPVOID lpParameter) {
    SOCKET s= (SOCKET)lpParameter;
    SOCKADDR_IN sRecvAddr,sSendAddr;
    int nSenderAddrSize = sizeof(sSendAddr);
    while (1) {
        if(SEND){
            sendto(s, "hello,too", 1024, 0, (sockaddr*)&sSendAddr, 50);
            SEND=false;
        }
    }
    system("pause");
    return 0;
}

int main() {

    // 初始化Socket2.2版本
    nResult = WSAStartup(MAKEWORD(2, 2), &wsd);
    if (nResult != NO_ERROR)
    {
        printf("WSAStartup failed:%d\n", WSAGetLastError());
        return 1;
    }

    // 创建一个Socket,SOCK_DGRAM表示UDP类型
    s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (s == INVALID_SOCKET)
    {
        printf("socket failed:%d\n", WSAGetLastError());
        return 1;
    }

    // 填充Socket接口
    sRecvAddr.sin_family = AF_INET;        // 地址协议,AF_INET支持TCP和UDP
    sRecvAddr.sin_port = htons(uPort);    // 通信端口,htons转为网络字节顺序
    sRecvAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);    // 接收任意地址数据

    // 绑定Socket至本机
    nResult = bind(s, (SOCKADDR *)&sRecvAddr, sizeof(sRecvAddr));
    if (nResult != 0){
        printf("bind failed:%d\n", WSAGetLastError());
        return 1;
    }

    HANDLE hThread=CreateThread(NULL,0,recvThread,(LPVOID)s,0,NULL);


    while(1){
      recvfrom(s, recvBuf, recvlen, 0, (SOCKADDR *)&s, &nSenderAddrSize);
        cout<<GetLastError()<<endl;
    }


    closesocket(s);
    WSACleanup();
    system("pause");
    return(0);
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

recvfrom阻塞接收的问题,网不通时会一直等待,若改成非阻塞的,亦不可靠谱。

可通过设置一个超时时间来实现