---
name: "ACE_SOCK_Dgram"
section: "3"
platform: "linux"
package: "libace-doc"
version: "5.0.7-4"
release: "Debian 2.2 (Potato)"
platforms: ["linux"]
url: "https://new.carta.tech/ACE_SOCK_Dgram"
---

# ACE\_SOCK\_Dgram(3)

Defines the member functions for the ACE\_SOCK datagram abstraction.

## NAME

ACE\_SOCK\_Dgram -  Defines the member functions for the ACE\_SOCK datagram abstraction.

## SYNOPSIS

```
#include <ace/SOCK_Dgram.h>
class ACE_SOCK_Dgram : public ACE_SOCK
{
  public:
    ACE_SOCK_Dgram (void);
    ACE_SOCK_Dgram (
        const ACE_Addr &local,
        int protocol_family = PF_INET,
        int protocol = 0,
        int reuse_addr = 0
        );
    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
        );
    int open (
        const ACE_Addr &local,
        int protocol_family = PF_INET,
        int protocol = 0,
        int reuse_addr = 0
        );
    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
        );
    ~ACE_SOCK_Dgram (void);
    ssize_t send (
        const void *buf,
        size_t n,
        const ACE_Addr &addr,
        int flags = 0
        ) const;
    ssize_t recv (
        void *buf,
        size_t n,
        ACE_Addr &addr,
        int flags = 0
        ) const;
    ssize_t recv (
        iovec *io_vec,
        ACE_Addr &addr,
        int flags = 0,
        const ACE_Time_Value *timeout = 0
        ) const;
    ssize_t send (
        const iovec iov[],
        size_t n,
        const ACE_Addr &addr,
        int flags = 0
        ) const;
    ssize_t recv (
        iovec iov[],
        size_t n,
        ACE_Addr &addr,
        int flags = 0
        ) const;
    ssize_t recv (
        void *buf,
        size_t n,
        ACE_Addr &addr,
        int flags,
        const ACE_Time_Value *timeout
        ) const;
    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;
    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;
    ssize_t send (
        const void *buf,
        size_t n,
        const ACE_Addr &addr,
        int flags,
        ACE_OVERLAPPED *overlapped,
        ACE_OVERLAPPED_COMPLETION_FUNC func
        ) const;
    ssize_t recv (
        void *buf,
        size_t n,
        ACE_Addr &addr,
        int flags,
        ACE_OVERLAPPED *overlapped,
        ACE_OVERLAPPED_COMPLETION_FUNC func
        ) const;
    void dump (void) const;
    ACE_ALLOC_HOOK_DECLARE;
  protected:
    int shared_open (const ACE_Addr &local, int protocol_family);
  private:
    int get_remote_addr (ACE_Addr &) const;
};
```

## Initialization and termination methods.

```
ACE_SOCK_Dgram (void);
```

Default constructor.

```
ACE_SOCK_Dgram (
    const ACE_Addr &local,
    int protocol_family = PF_INET,
    int protocol = 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 local address.

```
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 QoS-enabed method for initiating a socket dgram that will accept datagrams at the local address.  The qos\_params are passed to ACE\_OS::join\_leaf.

```
int open (
    const ACE_Addr &local,
    int protocol_family = PF_INET,
    int protocol = 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 local address.

```
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
    );
```

This is a QoS-enabed method for initiating a socket dgram that will accept datagrams at the local address.  The qos\_params are passed to ACE\_OS::join\_leaf.

```
~ACE_SOCK_Dgram (void);
```

Default dtor.

## Data transfer routines.

```
ssize_t send (
    const void *buf,
    size_t n,
    const ACE_Addr &addr,
    int flags = 0
    ) const;
```

Send an n byte buf to the datagram socket (uses sendto(3)).

```
ssize_t recv (
    void *buf,
    size_t n,
    ACE_Addr &addr,
    int flags = 0
    ) const;
```

Receive an n byte buf from the datagram socket (uses recvfrom(3)).

```
ssize_t recv (
    iovec *io_vec,
    ACE_Addr &addr,
    int flags = 0,
    const ACE_Time_Value *timeout = 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 iov\_base field of io\_vec using the \`\`delete \[\]'' syntax.

```
ssize_t send (
    const iovec iov[],
    size_t n,
    const ACE_Addr &addr,
    int flags = 0
    ) const;
```

Send an iovec of size n to the datagram socket (uses sendmsg(3)).

```
ssize_t recv (
    iovec iov[],
    size_t n,
    ACE_Addr &addr,
    int flags = 0
    ) const;
```

Recv an iovec of size n to the datagram socket (uses recvmsg(3)).

```
ssize_t recv (
    void *buf,
    size_t n,
    ACE_Addr &addr,
    int flags,
    const ACE_Time_Value *timeout
    ) const;
```

Wait up to timeout amount of time to receive a datagram into buf.  The ACE\_Time\_Value indicates how long to blocking trying to receive.  If timeout == 0, the caller will block until action is possible, else will wait until the relative time specified in \*timeout elapses).  If recv times out a -1 is returned with errno == ETIME.  If it succeeds the number of bytes received is returned.

```
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;
```

Send buffer\_count worth of buffers to addr using overlapped I/O (uses WSASentTo).  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;
```

Recv buffer\_count worth of buffers from addr using overlapped I/O (uses WSARecvFrom).  Returns 0 on success.

```
ssize_t send (
    const void *buf,
    size_t n,
    const ACE_Addr &addr,
    int flags,
    ACE_OVERLAPPED *overlapped,
    ACE_OVERLAPPED_COMPLETION_FUNC func
    ) const;
```

Send an n byte buf to the datagram socket (uses WSASentTo).

```
ssize_t recv (
    void *buf,
    size_t n,
    ACE_Addr &addr,
    int flags,
    ACE_OVERLAPPED *overlapped,
    ACE_OVERLAPPED_COMPLETION_FUNC func
    ) const;
```

Receive an n byte buf from the datagram socket (uses WSARecvFrom).

```
void dump (void) const;
```

Dump the state of an object.

```
ACE_ALLOC_HOOK_DECLARE;
```

Declare the dynamic allocation hooks.

## AUTHOR

Doug Schmidt

## LIBRARY

ace
