recvfrom () возвращает ошибку 10022 при передаче дескриптора сокета потоку

Я работаю над 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 lib.

1

Решение

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

0

Другие решения

Других решений пока нет …