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