// 创建网络通信层 iolayer_t iolayer_create( uint8_t nthreads, uint32_t nclients ) { struct iolayer * self = (struct iolayer *)malloc( sizeof(struct iolayer) ); if ( self == NULL ) { return NULL; } self->context = NULL; self->transform = NULL; self->nthreads = nthreads; self->nclients = nclients; self->localfunc = NULL; self->localdata = NULL; self->status = eLayerStatus_Running; // 初始化会话管理器 if ( _new_managers( self ) != 0 ) { iolayer_destroy( self ); return NULL; } // 创建网络线程组 self->group = iothreads_start( self->nthreads, _io_methods, self ); if ( self->group == NULL ) { iolayer_destroy( self ); return NULL; } return self; }
void IIOService::stop() { if ( m_IOLayer != NULL ) { iolayer_destroy( m_IOLayer ); m_IOLayer = NULL; } for ( size_t i = 0; i < m_ListenContexts.size(); ++i ) { delete m_ListenContexts[i]; } for ( size_t i = 0; i < m_ConnectContexts.size(); ++i ) { delete m_ConnectContexts[i]; } if ( m_IOContextGroup != NULL ) { for ( uint8_t i = 0; i < m_ThreadsCount; ++i ) { if ( m_IOContextGroup != NULL ) { finalIOContext( m_IOContextGroup[i] ); } } delete [] m_IOContextGroup; } m_ListenContexts.clear(); m_ConnectContexts.clear(); }