Task* CRTConnListener::GetSessionTask(int osSocket, struct sockaddr_in* addr) { TCPSocket* theSocket = NULL; Assert(osSocket != EventContext::kInvalidFileDesc); // when the server is behing a round robin DNS, the client needs to knwo the IP address ot the server // so that it can direct the "POST" half of the connection to the same machine when tunnelling RTSP thru HTTP CRTConnection* theTask = new CRTConnection(); if(NULL == theTask) return NULL; theSocket = theTask->GetSocket(); // out socket is not attached to a unix socket yet. //set options on the socket int sndBufSize = 96L * 1024L; theSocket->Set(osSocket, addr); theSocket->InitNonBlocking(osSocket); //we are a server, always disable nagle algorithm theSocket->NoDelay(); theSocket->KeepAlive(); theSocket->SetSocketBufSize(sndBufSize); //setup the socket. When there is data on the socket, //theTask will get an kReadEvent event theSocket->RequestEvent(EV_RE); theTask->SetTimer(30*1000); StrPtrLen* remoteStr = theSocket->GetRemoteAddrStr(); LI("CRTConnListener Get a connection,ip:%.*s port:%d \n",remoteStr->Len, remoteStr->Ptr, ntohs(addr->sin_port)); this->RunNormal(); return theTask; }
void LRTGroupSession::Init() { TCPSocket* socket = this->GetSocket(); socket->Open(); socket->InitNonBlocking(socket->GetSocketFD()); socket->NoDelay(); socket->KeepAlive(); socket->SetSocketBufSize(96L * 1024L); socket->SetTask(this); this->SetTimer(120*1000); for(int i=0;i<MSG_PACKED_ONCE_NUM;++i) { m_packedNewMsg.add_msgs(); } for(int i=0;i<MSG_PACKED_ONCE_NUM;++i) { m_packedSeqnMsg.add_msgs(); } for(int i=0;i<MSG_PACKED_ONCE_NUM;++i) { m_packedDataMsg.add_msgs(); } }
//acceptor模块调用GetSessionTask函数,创建一个连接会话,处理该socket句柄上的所有任务。 Task* ApsAppTcpListenerSocket::GetSessionTask(int osSocket, struct sockaddr_in* addr) { Assert(osSocket != EventContext::kInvalidFileDesc); TCPSocket* theSocket = NULL; //new one web accept session ApsAppSrvSession* theTask = new ApsAppSrvSession(); ApsLogger::Debug("New PushClientSession, socket fd = %d task = %p!",osSocket,theTask); if(NULL == theTask)//no enough memory, TCPListenerSocket will close the socket! { ApsLogger::Debug("PushClientSession create error: no memory!"); return NULL; } theSocket = theTask->GetSocket(); // out socket is not attached to a unix socket yet. //set options on the socket int sndBufSize = 1000L * 1024L; theSocket->Set(osSocket, addr); theSocket->InitNonBlocking(osSocket); theSocket->NoDelay(); theSocket->KeepAlive(); theSocket->SetSocketBufSize(sndBufSize); theSocket->RequestEvent(EV_RE); this->RunNormal(); return theTask; }
void MRTTransferSession::Init() { TCPSocket* socket = this->GetSocket(); socket->Open(); socket->InitNonBlocking(socket->GetSocketFD()); socket->NoDelay(); socket->KeepAlive(); socket->SetSocketBufSize(96L * 1024L); this->SetTimer(120*1000); }
bool RTHttpSender::ConnHttpHost(const std::string& addr, const unsigned short port, const std::string& host) { SetHttpHost(host); TCPSocket* socket = this->GetSocket(); if (socket->Open() != OS_NoErr) { LE("%s socket->Open failed!!!\n", __FUNCTION__); return false; } socket->InitNonBlocking(socket->GetSocketFD()); socket->NoDelay(); socket->SetSocketBufSize(96L * 1024L); socket->SetTask(this); this->SetTimer(5*1000); OS_Error err; do{ sleep(1); err = socket->Connect(SocketUtils::ConvertStringToAddr(addr.c_str()), port); LI("Connect to http server %s:%u, waiting...\n", addr.c_str(), port); }while(!(err==OS_NoErr || err==EISCONN)); //socket->RequestEvent(EV_RE); LI("%s addr:%s, port:%u\n", __FUNCTION__, addr.c_str(), port); return true; }