+ -
当前位置:首页 → 问答吧 → 多线程长连接服务器端,线程资源的回收问题

多线程长连接服务器端,线程资源的回收问题

时间:2010-08-25

来源:互联网

背景:主要是为了POS的接入提供服务,POS机通过海博通的网控器接入。
我要实现的功能:就是建立一个双工异步长连接的服务器端,与海波通的网控器实现长连接。

功能设计:1,创建一个服务器监听,用以接收客户端的连接(mian函数所做的操作)
          2,收到客户端的连接请求后创建一个字进程用于建立跟这个客户端的连接
          3,在字进程里创建一个接收线程和一个发送线程用以处理接收信息和发送信息
我主要是想,如果在创建的字进程里,做发送或者接收超时设置,如果超时,就直接exit,退出字进程。不知道这样是否存在问题。因为两个线程的资源可能都没有回收,而直接退出进程。

int main()
{
     InitSocket(ip, port);//监听
     while(1){
          clisock=accept(svrsock,0,0);
          if(fork = 0){
                  ConnFun();//如果收到一个监听,就创建一个字进程用于建立长连接。
          }

     }
}
//创建两个线程一个用于接收消息,一个用于发送消息
void ConnFun()
{
             pthread_t tid[2];
        void *pth_join_ret1;
        void *pth_join_ret2;
        int ret;
       
        //创建接收网控器消息的线程
        ret = pthread_create(&tid[0], NULL, doWorker1, NULL);
        if(ret != 0){
                close(clisock);
                exit(-1);
        }
                //创建发送网控器消息的线程
        ret = pthread_create(&tid[1], NULL, doWorker2, NULL);
        if(ret != 0){
                close(clisock);
                exit(-1);
        }
                ret = pthread_join(tid[0], &pth_join_ret1);
                ret = pthread_join(tid[1], &pth_join_ret2);
}

作者: dayuan555   发布时间: 2010-08-25

要实现这个我现在有几个问题:
1,不先收回线程资源,直接exit是否会出现问题。
2,线程超时设置,我以前一直在做多进程编程,多线程不太熟悉,但是一个进程内肯定是不支持多个SIGALRM信号的。
3,如果我想先回收线程资源,再在主线程里退出,应该怎么实现呢。

作者: dayuan555   发布时间: 2010-08-25