/* -*- C++ -*- */ //============================================================================= /** * @file SOCK_Dgram.h * * $Id$ * * @author Doug Schmidt */ //============================================================================= #ifndef ACE_SOCK_DGRAM_H #define ACE_SOCK_DGRAM_H #include /**/ "ace/pre.h" #include "ace/SOCK.h" #include "ace/INET_Addr.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ #include "ace/Addr.h" class ACE_Time_Value; /** * @class ACE_SOCK_Dgram * * @brief Defines the member functions for the ACE_SOCK datagram * abstraction. */ class ACE_Export ACE_SOCK_Dgram : public ACE_SOCK { public: // = Initialization and termination methods. /// Default constructor. ACE_SOCK_Dgram (void); /// This is a BSD-style method (i.e., no QoS) for initiating a socket /// dgram that will accept datagrams at the address. ACE_SOCK_Dgram (const ACE_Addr &local, int protocol_family = ACE_PROTOCOL_FAMILY_INET, int protocol = 0, int reuse_addr = 0); /** * This is a QoS-enabed method for initiating a socket dgram that * will accept datagrams at the address. The * are passed to . */ ACE_SOCK_Dgram (const ACE_Addr &local, int protocol_family, int protocol, ACE_Protocol_Info *protocolinfo, ACE_SOCK_GROUP g = 0, u_long flags = 0, int reuse_addr = 0); /// This is a BSD-style method (i.e., no QoS) for initiating a socket /// dgram that will accept datagrams at the address. int open (const ACE_Addr &local, int protocol_family = ACE_PROTOCOL_FAMILY_INET, int protocol = 0, int reuse_addr = 0); /** * This is a QoS-enabed method for initiating a socket dgram that * will accept datagrams at the address. The * are passed to . */ int open (const ACE_Addr &local, int protocol_family, int protocol, ACE_Protocol_Info *protocolinfo, ACE_SOCK_GROUP g = 0, u_long flags = 0, int reuse_addr = 0); /// Default dtor. ~ACE_SOCK_Dgram (void); // = Data transfer routines. /// Send an byte to the datagram socket (uses ). ssize_t send (const void *buf, size_t n, const ACE_Addr &addr, int flags = 0) const; /// Receive an byte from the datagram socket (uses /// ). ssize_t recv (void *buf, size_t n, ACE_Addr &addr, int flags = 0) const; /** * Allows a client to read from a socket without having to provide a * buffer to read. This method determines how much data is in the * socket, allocates a buffer of this size, reads in the data, and * returns the number of bytes read. The caller is responsible for * deleting the member in the field of using the * ``delete []'' syntax. */ ssize_t recv (iovec *io_vec, ACE_Addr &addr, int flags = 0, const ACE_Time_Value *timeout = 0) const; /// Send an of size to the datagram socket (uses /// ). ssize_t send (const iovec iov[], int n, const ACE_Addr &addr, int flags = 0) const; /// Recv an of size to the datagram socket (uses /// ). ssize_t recv (iovec iov[], int n, ACE_Addr &addr, int flags = 0) const; /** * Wait up to amount of time to receive a datagram into * . The indicates how long to blocking * trying to receive. If == 0, the caller will block * until action is possible, else will wait until the relative time * specified in * elapses). If times out a -1 is * returned with . If it succeeds the number of * bytes received is returned. */ ssize_t recv (void *buf, size_t n, ACE_Addr &addr, int flags, const ACE_Time_Value *timeout) const; /** * Wait up to amount of time to send a datagram to * . The indicates how long to blocking * trying to receive. If == 0, the caller will block * until action is possible, else will wait until the relative time * specified in * elapses). If times out a -1 is * returned with . If it succeeds the number of * bytes sent is returned. */ ssize_t send (const void *buf, size_t n, const ACE_Addr &addr, int flags, const ACE_Time_Value *timeout) const; /// Send worth of to using overlapped /// I/O (uses ). Returns 0 on success. ssize_t send (const iovec buffers[], int buffer_count, size_t &number_of_bytes_sent, int flags, const ACE_Addr &addr, ACE_OVERLAPPED *overlapped, ACE_OVERLAPPED_COMPLETION_FUNC func) const; /// Recv worth of from using /// overlapped I/O (uses ). Returns 0 on success. ssize_t recv (iovec buffers[], int buffer_count, size_t &number_of_bytes_recvd, int &flags, ACE_Addr &addr, ACE_OVERLAPPED *overlapped, ACE_OVERLAPPED_COMPLETION_FUNC func) const; /// Send an byte to the datagram socket (uses ). ssize_t send (const void *buf, size_t n, const ACE_Addr &addr, int flags, ACE_OVERLAPPED *overlapped, ACE_OVERLAPPED_COMPLETION_FUNC func) const; /// Receive an byte from the datagram socket (uses /// ). ssize_t recv (void *buf, size_t n, ACE_Addr &addr, int flags, ACE_OVERLAPPED *overlapped, ACE_OVERLAPPED_COMPLETION_FUNC func) const; // = Meta-type info. typedef ACE_INET_Addr PEER_ADDR; /// Dump the state of an object. void dump (void) const; void set_nic (const char *option_value); /// Declare the dynamic allocation hooks. ACE_ALLOC_HOOK_DECLARE; protected: /// Open is shared by this and by . int shared_open (const ACE_Addr &local, int protocol_family); private: /// Do not allow this function to percolate up to this interface... int get_remote_addr (ACE_Addr &) const; }; #if !defined (ACE_LACKS_INLINE_FUNCTIONS) #include "ace/SOCK_Dgram.i" #endif #include /**/ "ace/post.h" #endif /* ACE_SOCK_DGRAM_H */