Я работаю над 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.
‘my_sock’ и, следовательно, ‘param’ и ‘sock’, не являются допустимым дескриптором сокета. Что-то не так с вашим кодом создания сокета.
Других решений пока нет …