2013-12-09 1 views
1

Я работаю над чатом UDP для классов программирования. Пока что я имею дело с параллельными входами/выходами.recvfrom() возвращает ошибку 10022 при передаче дескриптора дескриптора в поток

Итак, я создаю поток для получения сообщений от сервера:

// 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 lib.

ответ

0

'my_sock', и поэтому 'param' и 'sock' не является допустимым дескриптором сокета. Что-то не так с вашим кодом создания сокета.

+0

Если он идет без перехода к CreateThread, он отлично работает, работы сокетов, никаких ошибок, но когда я передаю его функции createthread, как в коде в вопросе, возникает ошибка. Благодарим вас за помощь. – user3081123