Public Member Functions | Protected Attributes

TAO_AV_UDP_MCast_Transport Class Reference

A transport abstraction for Multicast dgram sockets. Uses the ACE_SOCK_Dgram_Mcast to send data. More...

#include <MCast.h>

Inheritance diagram for TAO_AV_UDP_MCast_Transport:
Inheritance graph
[legend]
Collaboration diagram for TAO_AV_UDP_MCast_Transport:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 TAO_AV_UDP_MCast_Transport (void)
 TAO_AV_UDP_MCast_Transport (TAO_AV_UDP_MCast_Flow_Handler *handler)
virtual ~TAO_AV_UDP_MCast_Transport (void)
virtual int open (ACE_Addr *address)
virtual int close (void)
virtual int mtu (void)
 Write the complete Message_Block chain to the connection.
virtual ACE_Addrget_peer_addr (void)
 Write the complete Message_Block chain to the connection.
virtual ACE_Addrget_local_addr (void)
virtual ssize_t send (const ACE_Message_Block *mblk, ACE_Time_Value *s=0)
virtual ssize_t send (const char *buf, size_t len, ACE_Time_Value *s=0)
 Write the contents of the buffer of length len to the connection.
virtual ssize_t send (const iovec *iov, int iovcnt, ACE_Time_Value *s=0)
 Write the contents of iovcnt iovec's to the connection.
virtual ssize_t recv (char *buf, size_t len, ACE_Time_Value *s=0)
 Read len bytes from into buf.
virtual ssize_t recv (char *buf, size_t len, int flags, ACE_Time_Value *s=0)
 Read len bytes from into buf using flags.
virtual ssize_t recv (iovec *iov, int iovcnt, ACE_Time_Value *s=0)
 Read received data into the iovec buffers.

Protected Attributes

TAO_AV_UDP_MCast_Flow_Handlerhandler_
ACE_INET_Addr peer_addr_
ACE_INET_Addr local_addr_

Detailed Description

A transport abstraction for Multicast dgram sockets. Uses the ACE_SOCK_Dgram_Mcast to send data.

Definition at line 32 of file MCast.h.


Constructor & Destructor Documentation

TAO_AV_UDP_MCast_Transport::TAO_AV_UDP_MCast_Transport ( void   ) 

Definition at line 63 of file MCast.cpp.

  :handler_ (0)
{
}

TAO_AV_UDP_MCast_Transport::TAO_AV_UDP_MCast_Transport ( TAO_AV_UDP_MCast_Flow_Handler handler  ) 

Definition at line 68 of file MCast.cpp.

  :handler_ (handler)
{
}

TAO_AV_UDP_MCast_Transport::~TAO_AV_UDP_MCast_Transport ( void   )  [virtual]

Definition at line 73 of file MCast.cpp.

{
}


Member Function Documentation

int TAO_AV_UDP_MCast_Transport::close ( void   )  [virtual]

Implements TAO_AV_Transport.

Definition at line 84 of file MCast.cpp.

{
  return 0;
}

ACE_Addr * TAO_AV_UDP_MCast_Transport::get_local_addr ( void   )  [virtual]

Reimplemented from TAO_AV_Transport.

Definition at line 97 of file MCast.cpp.

{
  this->handler_->get_mcast_socket ()->get_local_addr (this->local_addr_);
  return &this->local_addr_;
}

ACE_Addr * TAO_AV_UDP_MCast_Transport::get_peer_addr ( void   )  [virtual]

Write the complete Message_Block chain to the connection.

Implements TAO_AV_Transport.

Definition at line 91 of file MCast.cpp.

{
  return &this->peer_addr_;
}

int TAO_AV_UDP_MCast_Transport::mtu ( void   )  [virtual]

Write the complete Message_Block chain to the connection.

Implements TAO_AV_Transport.

Definition at line 185 of file MCast.cpp.

{
  return ACE_MAX_DGRAM_SIZE;
}

int TAO_AV_UDP_MCast_Transport::open ( ACE_Addr address  )  [virtual]

Implements TAO_AV_Transport.

Definition at line 78 of file MCast.cpp.

{
  return 0;
}

ssize_t TAO_AV_UDP_MCast_Transport::recv ( char *  buf,
size_t  len,
int  flags,
ACE_Time_Value s = 0 
) [virtual]

Read len bytes from into buf using flags.

Implements TAO_AV_Transport.

Definition at line 200 of file MCast.cpp.

{
  return this->handler_->get_mcast_socket ()->recv (buf,
                                                    len,
                                                    this->peer_addr_,
                                                    flags,
                                                    timeout);
}

ssize_t TAO_AV_UDP_MCast_Transport::recv ( iovec *  iov,
int  iovcnt,
ACE_Time_Value s = 0 
) [virtual]

Read received data into the iovec buffers.

Implements TAO_AV_Transport.

Definition at line 213 of file MCast.cpp.

{
  return handler_->get_mcast_socket ()->recv (iov,this->peer_addr_,0,timeout);
}

ssize_t TAO_AV_UDP_MCast_Transport::recv ( char *  buf,
size_t  len,
ACE_Time_Value s = 0 
) [virtual]

Read len bytes from into buf.

Implements TAO_AV_Transport.

Definition at line 192 of file MCast.cpp.

{
  return this->handler_->get_mcast_socket ()->recv (buf, len,this->peer_addr_);
}

ssize_t TAO_AV_UDP_MCast_Transport::send ( const iovec *  iov,
int  iovcnt,
ACE_Time_Value s = 0 
) [virtual]

Write the contents of iovcnt iovec's to the connection.

Implements TAO_AV_Transport.

Definition at line 174 of file MCast.cpp.

{
  return this->handler_->get_mcast_socket ()->send (iov,
                                                    iovcnt,
                                                    0);

}

ssize_t TAO_AV_UDP_MCast_Transport::send ( const char *  buf,
size_t  len,
ACE_Time_Value s = 0 
) [virtual]

Write the contents of the buffer of length len to the connection.

Implements TAO_AV_Transport.

Definition at line 160 of file MCast.cpp.

{
//   if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"TAO_AV_UDP_MCast_Transport::send "));
//   char addr [BUFSIZ];
//   this->peer_addr_.addr_to_string (addr,BUFSIZ);
//   if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"to %s\n",addr));

  return this->handler_->get_mcast_socket ()->send (buf, len);

}

ssize_t TAO_AV_UDP_MCast_Transport::send ( const ACE_Message_Block mblk,
ACE_Time_Value s = 0 
) [virtual]

Implements TAO_AV_Transport.

Definition at line 104 of file MCast.cpp.

{
  // For the most part this was copied from GIOP::send_request and
  // friends.

  iovec iov[ACE_IOV_MAX];
  int iovcnt = 0;
  ssize_t n = 0;
  ssize_t nbytes = 0;

  for (const ACE_Message_Block *i = mblk;
       i != 0;
       i = i->cont ())
    {
      // Make sure there is something to send!
      if (i->length () > 0)
        {
          iov[iovcnt].iov_base = i->rd_ptr ();
          iov[iovcnt].iov_len  = static_cast<u_long> (i->length ());
          iovcnt++;

          // The buffer is full make a OS call.  @@ TODO this should
          // be optimized on a per-platform basis, for instance, some
          // platforms do not implement writev() there we should copy
          // the data into a buffer and call send_n(). In other cases
          // there may be some limits on the size of the iovec, there
          // we should set ACE_IOV_MAX to that limit.
          if (iovcnt == ACE_IOV_MAX)
            {
              n = this->handler_->get_mcast_socket ()->send ((const iovec *) iov,
                                                             iovcnt);

              if (n < 1)
                return n;

              nbytes += n;
              iovcnt = 0;
            }
        }
    }

  // Check for remaining buffers to be sent!
  if (iovcnt != 0)
    {
      n = this->handler_->get_mcast_socket ()->send ((const iovec *) iov,
                                                     iovcnt);
      if (n < 1)
        return n;

      nbytes += n;
    }

  return nbytes;
}


Member Data Documentation

Definition at line 81 of file MCast.h.

Definition at line 83 of file MCast.h.

Definition at line 82 of file MCast.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines