int start_iowatcher(t_iowatcher_info *p) { if(NULL == p){ return -1; } if(p->_io_event&DEF_IOE_READ){ if(create_io_thread(&p->_io_read) < 0){ printf("create_io_thread read failed\n"); return -1; } printf("create_io_thread read ok\n"); } if(p->_io_event& DEF_IOE_WRITE){ if(create_io_thread(&p->_io_write) < 0){ printf("create_io_thread write failed\n"); return -1; } printf("create_io_thread write ok\n"); } return 0; }
int dim_tcpip_init(int thr_flag) { #ifdef WIN32 int addr, flags = 1; /* void tcpip_task(); */ void create_io_thread(void); #else struct sigaction sig_info; sigset_t set; void io_sig_handler(); void dummy_io_sig_handler(); void tcpip_pipe_sig_handler(); #endif extern int get_write_tmout(); if(init_done) return(1); dim_get_write_timeout(); #ifdef WIN32 init_sock(); Threads_on = 1; #else if(thr_flag) { Threads_on = 1; } else { sigemptyset(&set); sigaddset(&set,SIGALRM); sig_info.sa_handler = io_sig_handler; sig_info.sa_mask = set; #ifndef LYNXOS sig_info.sa_flags = SA_RESTART; #else sig_info.sa_flags = 0; #endif if( sigaction(SIGIO, &sig_info, 0) < 0 ) { perror( "sigaction(SIGIO)" ); exit(1); } sigemptyset(&set); sig_info.sa_handler = tcpip_pipe_sig_handler; sig_info.sa_mask = set; #ifndef LYNXOS sig_info.sa_flags = SA_RESTART; #else sig_info.sa_flags = 0; #endif if( sigaction(SIGPIPE, &sig_info, 0) < 0 ) { perror( "sigaction(SIGPIPE)" ); exit(1); } } #endif if(Threads_on) { #ifdef WIN32 if(DIM_IO_path[0] == -1) { if( (DIM_IO_path[0] = (int)socket(AF_INET, SOCK_STREAM, 0)) == -1 ) { perror("socket"); return(0); } DIM_sockname.sin_family = PF_INET; addr = 0; DIM_sockname.sin_addr = *((struct in_addr *) &addr); DIM_sockname.sin_port = htons((ushort) 2000); ioctl(DIM_IO_path[0], FIONBIO, &flags); } #else if(DIM_IO_path[0] == -1) { pipe(DIM_IO_path); } #endif } if(!queue_id) queue_id = dtq_create(); #ifdef WIN32 /* #ifndef STDCALL tid = _beginthread((void *)(void *)tcpip_task,0,NULL); #else tid = _beginthreadex(NULL, NULL, tcpip_task,0,0,NULL); #endif */ create_io_thread(); #endif init_done = 1; return(1); }