Chinaunix

标题: 关于多线程select [打印本页]

作者: godguy    时间: 2007-11-14 11:14
标题: 关于多线程select
我有两个线程,其中一个线程select 一个socket, 这个socket是我和外面通讯的接口,跑UDP协议。
另外一个socket是linux内部socket, 是socketpair创建的。是和其他子进程通讯的接口。
具体如下:
switch(select(para.sock + 1, &fdR,NULL,NULL,&csel)){
                        case -1:
                                if (errno == EINTR){
                                        ah_dbg(info,"have a interrupt!\n");  
                                        return 0;
                                }
                                ah_err("select error:%d!\n",errno);
                                continue;                                
                        case 0:
                                if (get_listen_state == LISTEN_STOP){
                                        ah_dbg(info,"timer out!\n");
                                        break;
                                }
                                continue;
                        default:
                                if (FD_ISSET(para.sock,&fdR)) {   
                                     /*do my thing*/
                               }
}

另外一个线程的内部socket
FD_ZERO(&fdR);
                FD_SET(para.dtls.SocketPair[DTLS_SOCKET_READ], &fdR);
                  ah_dbg(ssl,"Ready listen socket %d\n",para.dtls.SocketPair[DTLS_SOCKET_READ]);
                switch(select(para.dtls.SocketPair[DTLS_SOCKET_READ] + 1, &fdR,NULL,NULL,&sel)){
                        case -1:                                
                                 ah_dbg(ssl,"have a interrupt!\n");
                                continue;                                
                        case 0:
                                ah_dbg(ssl,"dtls select time out\n");
                                continue;
                        default:
                                if (FD_ISSET(para.dtls.SocketPair[DTLS_SOCKET_READ], &fdR)) {     
                                        /*do my thing*/  
                                }


问题是第一个select完全正常工作,第二个select经常收到第一个socket的数据(socketpair【DTLS_SOCKET_READ】工作不正常)

请问是甚么问题?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2