IModule * Logicmgr::FindModule(const char * pStrModuleName) { map<string, IModule *>::iterator itor = m_mapModules.find(pStrModuleName); if (itor == m_mapModules.end() || NULL == itor->second) { ECHO_ERROR("There is no LogciModule named %s", pStrModuleName); return NULL; } return itor->second; }
error_code async_listen(const char * pStrIP, s32 nPort, OUT s32 * pnError, void * pData, s32 backlog) { ASSERT(pStrIP != NULL && pnError != NULL); errno = 0; struct epoll_event e; struct cepoll_event * pEvent = NULL; s32 s = socket(AF_INET, SOCK_STREAM, 0); if (-1 == (s = socket(AF_INET, SOCK_STREAM, 0))) { ECHO_ERROR("socket error %d", errno); return false; } //把socket设置为非阻塞方式 if (!Setnonblocking(s)) { ECHO_ERROR("Setnonblocking error %d", errno); return false; } pEvent = malloc_event(); if (NULL == pEvent) { //assert(false); ECHO_ERROR("%s", "get cepoll_event error"); RETURN_RES(ERROR_MALLOC_EVENT); } struct sockaddr_in addr; memset(&addr, 0, sizeof (addr)); addr.sin_family = AF_INET; inet_aton(pStrIp, &(addr.sin_addr)); addr.sin_port = htons(nPort); if (-1 == bind(s, (sockaddr *) & addr, sizeof (addr)) || -1 == (listen(s, LISTEN_QUENE))) { Assert(false); return false; } struct epoll_event ev; ev.data.ptr = pListen; ev.events = EPOLLIN; // | EPOLLET; epoll_ctl(m_epfd, EPOLL_CTL_ADD, listenfd, &ev); return true; }
/** 异步连接 */ error_code async_connect(const char * pStrIP, s32 nPort, OUT s32 * pnError, void * pData) { struct epoll_event e; struct cepoll_event * pEvent = NULL; s32 s = socket(AF_INET, SOCK_STREAM, 0); errno = 0; if (-1 == fcntl(s, F_SETFL, fcntl(s, F_GETFL) | O_NONBLOCK)) { RETURN_RES(ERROR_FCNTL); } pEvent = malloc_event(); if (NULL == pEvent) { //assert(false); ECHO_ERROR("%s", "get cepoll_event error"); RETURN_RES(ERROR_MALLOC_EVENT); } pEvent->s = s; pEvent->p = pData; pEvent->event = EVENT_ASYNC_CONNECT; e.events = EPOLLOUT | EPOLLET; e.data.ptr = pEvent; epoll_ctl(s_epfd, EPOLL_CTL_ADD, s, &e); if((pEvent->remote.sin_addr.s_addr = inet_addr(pStrIP)) == INADDR_NONE) { free_event(pEvent); RETURN_RES(ERROR_IP_FORMAT); } *pnError = connect(s, (struct sockaddr*)&pEvent->remote, sizeof(pEvent->remote)); /* getsockopt(socket_fd, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len); if( !error ) { //OK } */ *pnError = 100; return ERROR_CODE_MAX; }