0
我想通过创建线程来实现多线程UDP服务器。使用c实现UDP服务器中的线程
以下方法用于创建线程。
pthread_create(&threadID, NULL, ThreadMain, threadArgs);
ThreadMain方法,
void *ThreadMain(void *threadArgs) {
pthread_detach(pthread_self());
int sock = ((struct ThreadArgs *) threadArgs)->sock;
free(threadArgs);
HandleUDPClient(sock);
return (NULL);
}
在HandleUDPClient的方法是这样的,
void HandleUDPClient(int sock) {
struct sockaddr_storage clntAddr; // Client address
// Set Length of client address structure (in-out parameter)
socklen_t clntAddrLen = sizeof(clntAddr);
// Block until receive message from a client
char buffer[MAXSTRINGLENGTH]; // I/O buffer
// Size of received message
ssize_t numBytesRcvd = recvfrom(sock, buffer, MAXSTRINGLENGTH, 0, (struct sockaddr *) &clntAddr, &clntAddrLen);
...
...
当我创造插座并运行它从客户端完全处理请求的HandleUDPClient方法。但是当我尝试使用线程时,在进入HandleUDPClient方法后,它不处理recvfrom方法。实际上,它不会等待客户收到任何请求。程序只是终止。
有人可以告诉我为什么发生这个问题,我该如何解决它?
http://stackoverflow.com/questions/11624545/how-to-make-main-thread-wait-for-all-child-threads-finish - 这应该有所帮助。 – user1770426