//====================================================================================== TcpSocket* TcpSocket::Accept() { struct sockaddr_in sa; socklen_t len = sizeof(sa); Log.i(SOCK_TAG, "TcpSocket::Accept m_iSocket=%u", m_iSocket); int ret = accept(m_iSocket, (struct sockaddr*) &sa, &len); if (-1 == ret){ Log.e(SOCK_TAG, "TcpSocket::Accept -1!"); return NULL; } if (0 == ret) { Log.e(SOCK_TAG, "TcpSocket::Accept 0!"); return NULL; } TcpSocket *pNew = new TcpSocket(m_pSelector); pNew->m_iSocket = ret; //pNew->m_ip = ntohl(sa.sin_addr.s_addr); //pNew->m_iPort = ntohs(sa.sin_port); pNew->m_ip = sa.sin_addr.s_addr; pNew->m_iPort = sa.sin_port; pNew->m_bConnected = true; pNew->m_iLastRecvTime = SelectorEPoll::getInstance().m_iHaoMiao; pNew->setTimeout(m_iTimeout); pNew->SetNBlock(); Log.i(SOCK_TAG, "TcpSocket accept %s:%u", ip2str(pNew->m_ip), pNew->m_iPort); return pNew; }
void Worker::newSocket(qintptr socket) { //qDebug() << m_name << " is handling a new request; thread id" << thread()->currentThreadId(); TcpSocket* s = new TcpSocket(this); s->m_id = static_cast<unsigned int>(rand()); connect(s, SIGNAL(readyRead()), this, SLOT(readClient())); connect(s, SIGNAL(disconnected()), this, SLOT(discardClient())); s->setSocketDescriptor(socket); s->setTimeout(1000*60*2); #ifndef NO_LOG sLog() << m_name << " receive a new request from ip:" << s->peerAddress().toString(); #endif }
TcpSocket* SocketHandler::createTcpListener(uint32_t uiIP, uint16_t& iPort, SocketHandler *handler, uint32_t timeout, const char* dbgname) { TcpSocket* listenRes = new TcpSocket(&SelectorEPoll::getInstance(), dbgname); if(listenRes->Listen(uiIP, iPort, true) == false) { log(Error, "ListenManager tcp port %u listen failed", iPort); return NULL; } listenRes->m_pHandler = handler; listenRes->setListenSockt(true); listenRes->setTimeout(timeout); //log(Debug, "Calling g_epoll.SetEvent"); SelectorEPoll::getInstance().SetEvent(listenRes, 0, SEL_READ); return listenRes; }