我正在为编程类开发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。
答案 0 :(得分:0)
'my_sock',因此'param'和'sock'不是有效的套接字句柄。套接字创建代码有问题。