## NAME

ACE_SOCK_Stream - Defines the methods in the `ACE_SOCK_Stream` abstraction.

## SYNOPSIS

    #include <ace/SOCK_Stream.h>

    class ACE_SOCK_Stream : public ACE_SOCK_IO
    {
      public:
        ACE_SOCK_Stream (void);
        ACE_SOCK_Stream (ACE_HANDLE h);
        ~ACE_SOCK_Stream (void);
        ssize_t send_n (const void *buf, int n) const;
        ssize_t recv_n (void *buf, int n) const;
        ssize_t send_n (const void *buf, int n, int flags) const;
        ssize_t recv_n (void *buf, int n, int flags) const;
        ssize_t send_n (
            const void *buf,
            size_t len,
            int flags,
            const ACE_Time_Value *timeout
            );
        ssize_t recv_n (
            void *buf,
            size_t len,
            int flags,
            const ACE_Time_Value *timeout
            );
        ssize_t sendv_n (const iovec iov[], size_t n) const;
        ssize_t recvv_n (iovec iov[], size_t n) const;
        ssize_t send_urg (void *ptr, int len = sizeof (char));
        ssize_t recv_urg (void *ptr, int len = sizeof (char));
        int close_reader (void);
        int close_writer (void);
        int close (void);
        typedef ACE_INET_Addr PEER_ADDR;
        void dump (void) const;
        ACE_ALLOC_HOOK_DECLARE;
    };

## DESCRIPTION

This adds additional wrapper methods atop the `ACE_SOCK_IO` class.

## The following two methods use write and read system calls.

    ssize_t send_n (const void *buf, int n) const;

Send n bytes, keep trying until n are sent.

    ssize_t recv_n (void *buf, int n) const;

Recv n bytes, keep trying until n are received.

## The following two methods use the send and recv system calls.

    ssize_t send_n (const void *buf, int n, int flags) const;

Send n bytes, keep trying until n are sent.

    ssize_t recv_n (void *buf, int n, int flags) const;

Recv n bytes, keep trying until n are received.

    ssize_t send_n (
        const void *buf,
        size_t len,
        int flags,
        const ACE_Time_Value *timeout
        );

Try to send exactly `len` bytes into `buf` from `handle` (uses the `send` call). If `send` blocks for longer than `timeout` the number of bytes actually sent is returned with `errno == ETIME`. If a timeout does not occur, `send_n` return `len` (i.e., the number of bytes requested to be sent).

    ssize_t recv_n (
        void *buf,
        size_t len,
        int flags,
        const ACE_Time_Value *timeout
        );

Try to recv exactly `len` bytes into `buf` from `handle` (uses the `ACE::recv_n` call). 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` blocks for longer than `timeout` the number of bytes actually read is returned with `errno == ETIME`. If a timeout does not occur, `recv_n` return `len` (i.e., the number of bytes requested to be read).

    ssize_t sendv_n (const iovec iov[], size_t n) const;

Send an `iovec` of size `n` to the connected socket (uses `ACE::sendv_n`). Will block until all bytes are sent or an error occurs.

    ssize_t recvv_n (iovec iov[], size_t n) const;

Receive an `iovec` of size `n` to the connected socket.

## Send/receive an ``urgent'' character (see TCP specs...).

    ssize_t send_urg (void *ptr, int len = sizeof (char));

    ssize_t recv_urg (void *ptr, int len = sizeof (char));

## Selectively close endpoints.

    int close_reader (void);

Close down the reader.

    int close_writer (void);

Close down the writer.

    int close (void);

Close down the socket (we need this to make things work correctly on Win32, which requires use to do a `close_writer` before doing the close to avoid losing data).

## Meta-type info

    typedef ACE_INET_Addr PEER_ADDR;

    void dump (void) const;

Dump the state of an object.

    ACE_ALLOC_HOOK_DECLARE;

Declare the dynamic allocation hooks.

## AUTHOR

Doug Schmidt

## LIBRARY

ace