Exemple #1
0
    //当有新的连接,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
}