【问题标题】:Implementing thread in UDP server using c使用c在UDP服务器中实现线程
【发布时间】:2013-11-04 10:14:01
【问题描述】:

我正在尝试通过创建线程来实现多线程 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 方法。实际上它不会等待客户端接收任何请求。程序刚刚终止。

谁能告诉我为什么会出现这个问题,我该如何解决?

【问题讨论】:

标签: c multithreading sockets udp


【解决方案1】:

问题在于您分离了线程,这意味着您不必等待线程退出。相反,主程序继续它的工作,直到它到达终点然后退出,而不考虑仍在运行的(分离的)线程。

要么不分离线程,而是使用pthread_join 来“加入”线程,或者使用主线程中的pthread_exit 来确保它会等待所有分离的线程完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 2014-04-24
    • 2015-04-11
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多