【问题标题】:recvfrom() returns error 10022 when passing socket handle to thread将套接字句柄传递给线程时,recvfrom() 返回错误 10022
【发布时间】:2013-12-25 23:59:32
【问题描述】:

我正在为编程课程开发 UDP 聊天。现在,我正在处理并行输入/输出。

所以,我正在创建线程来接收来自服务器的消息:

// in-thread
DWORD WINAPI in_thread(void* param)
{
    int n; // variable receivefrom returned
    char buff2[1000];

    sockaddr_in client_addr;
    int client_addr_size = sizeof(client_addr);

    SOCKET my_sock;
    my_sock = (SOCKET)param; // casting from void* to SOCKET

    // reading server message

    while (1)
    {
        n = recvfrom(my_sock, buff2, sizeof(buff2) - 1, 0, (sockaddr*)&client_addr, &client_addr_size);
        // ......................
    }

    ExitThread(0);
}

套接字句柄来自:

hThread = CreateThread(NULL, NULL, &in_thread, (void*)sock, NULL, &ThreadId);

但我收到了:

错误 10022:参数无效。 (由rercvfrom返回)

哪里出了问题?

编辑:

如果它没有传递给 CreateThread,它工作正常。 例如:

SOCKET sock; 
// Opening socket 
sock=socket(AF_INET, SOCK_DGRAM, 0); 
int n; // variable receivefrom returned 
char buff2[1000]; 
sockaddr_in client_addr; 
int client_addr_size = sizeof(client_addr); 
n= recvfrom(sock,buff2,sizeof(buff2)-1,0, (sockaddr *) &client_addr, &client_addr_size); 

它工作正常,套接字工作,没有给出错误,但是当我像问题中的代码一样将它传递给 createthread 时,会发生错误。

使用 VS10、winsock2 库。

【问题讨论】:

    标签: c++ sockets udp winsock createthread


    【解决方案1】:

    'my_sock',因此 'param' 和 'sock',不是有效的套接字句柄。您的套接字创建代码有问题。

    【讨论】:

    • 如果它没有传递给 CreateThread,它工作正常,套接字工作,没有给出错误,但是当我像问题中的代码一样将它传递给 createthread 函数时,会发生错误。感谢您的帮助。
    猜你喜欢
    • 2019-05-22
    • 2020-08-25
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2021-09-15
    • 1970-01-01
    相关资源
    最近更新 更多