//当有新的连接,epoll被触发时,回调HandleAccept()函数并建立新的连接 void TcpServer::HandleAccept() { struct sockaddr_in client_addr; int accept_fd; while((accept_fd=Socket::Accept(listenChannel_->GetFd(), &client_addr))>=0) { sockaddr_in local,peer; socklen_t len=sizeof(local); int ret; ret=getsockname(accept_fd, (struct sockaddr*)&local, &len); if (ret<0) { ERROR_LOG("get local addr failed! %d %s",errno,strerror(errno)); continue; } ret=getpeername(accept_fd, (sockaddr*)&peer, &len); if (ret<0) { ERROR_LOG("get peer addr failed! %d %s",errno,strerror(errno)); continue; } Ip4Addr local_addr(local),peer_addr(peer); this->NewConnection(accept_fd,local_addr,peer_addr); } }
// Exclude 3 static void show_codgram (void) { char buff[BUFSIZ]; size_t buflen = sizeof (buff); // Exclude 3 const ACE_TCHAR *peer = ACE_TEXT ("other_host:8042"); ACE_INET_Addr peer_addr (peer); ACE_SOCK_CODgram udp; if (0 != udp.open (peer_addr)) ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), peer)); // ... if (-1 == udp.send (buff, buflen)) ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("send"))); // Listing 3 }