我正在尝试通过创建线程来实现多线程 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 方法。实际上它不会等待客户端接收任何请求。程序刚刚终止。
谁能告诉我为什么会出现这个问题,我该如何解决?