## NAME

ACE_SOCK_Acceptor - Defines a factory that creates new `ACE_Stream`s passively.

## SYNOPSIS

    #include <ace/SOCK_Acceptor.h>

    class ACE_SOCK_Acceptor : public ACE_SOCK
    {
      public:
        ACE_SOCK_Acceptor (void);
        ACE_SOCK_Acceptor (
            const ACE_Addr &local_sap,
            int reuse_addr = 0,
            int protocol_family = PF_INET,
            int backlog = ACE_DEFAULT_BACKLOG,
            int protocol = 0
            );
        ACE_SOCK_Acceptor (
            const ACE_Addr &local_sap,
            ACE_Protocol_Info *protocolinfo,
            ACE_SOCK_GROUP g,
            u_long flags,
            int reuse_addr,
            int protocol_family,
            int backlog = ACE_DEFAULT_BACKLOG,
            int protocol = 0
            );
        int open (
            const ACE_Addr &local_sap,
            int reuse_addr = 0,
            int protocol_family = PF_INET,
            int backlog = ACE_DEFAULT_BACKLOG,
            int protocol = 0
            );
        int open (
            const ACE_Addr &local_sap,
            ACE_Protocol_Info *protocolinfo,
            ACE_SOCK_GROUP g,
            u_long flags,
            int reuse_addr,
            int protocol_family,
            int backlog = ACE_DEFAULT_BACKLOG,
            int protocol = 0
            );
        ~ACE_SOCK_Acceptor (void);
        int accept (
            ACE_SOCK_Stream &new_stream,
            ACE_Addr *remote_addr = 0,
            ACE_Time_Value *timeout = 0,
            int restart = 1,
            int reset_new_handle = 0
            ) const;
        int accept (
            ACE_SOCK_Stream &new_stream,
            ACE_Accept_QoS_Params qos_params,
            ACE_Addr *remote_addr = 0,
            ACE_Time_Value *timeout = 0,
            int restart = 1,
            int reset_new_handle = 0
            ) const;
        typedef ACE_INET_Addr PEER_ADDR;
        typedef ACE_SOCK_Stream PEER_STREAM;
        void dump (void) const;
        ACE_ALLOC_HOOK_DECLARE;
      protected:
        int shared_accept_start (
            ACE_Time_Value *timeout,
            int restart,
            int &in_blocking_mode
            ) const;
        int shared_accept_finish (
            ACE_SOCK_Stream new_stream,
            int in_blocking_mode,
            int reset_new_handle
            ) const;
        int shared_open (
            const ACE_Addr &local_sap,
            int protocol_family,
            int backlog
            );
      private:
        int get_remote_addr (ACE_Addr &) const;
    };

## DESCRIPTION

The `ACE_SOCK_Acceptor` has its own "passive-mode" socket. This serves as a factory to create so-called "data-mode" sockets, which are what the `ACE_SOCK_Stream` encapsulates. Therefore, by inheriting from `ACE_SOCK`, `ACE_SOCK_Acceptor` gets its very own socket.

## Initialization and termination methods.

    ACE_SOCK_Acceptor (void);

Default constructor.

    ACE_SOCK_Acceptor (
        const ACE_Addr &local_sap,
        int reuse_addr = 0,
        int protocol_family = PF_INET,
        int backlog = ACE_DEFAULT_BACKLOG,
        int protocol = 0
        );

Initialize a passive-mode BSD-style acceptor socket (no QoS). `local_sap` is the address that we're going to listen for connections on. If `reuse_addr` is 1 then we'll use the `SO_REUSEADDR` to reuse this address.

    ACE_SOCK_Acceptor (
        const ACE_Addr &local_sap,
        ACE_Protocol_Info *protocolinfo,
        ACE_SOCK_GROUP g,
        u_long flags,
        int reuse_addr,
        int protocol_family,
        int backlog = ACE_DEFAULT_BACKLOG,
        int protocol = 0
        );

Initialize a passive-mode QoS-enabled acceptor socket. Returns 0 on success and -1 on failure.

    int open (
        const ACE_Addr &local_sap,
        int reuse_addr = 0,
        int protocol_family = PF_INET,
        int backlog = ACE_DEFAULT_BACKLOG,
        int protocol = 0
        );

Initialize a passive-mode BSD-style acceptor socket (no QoS). `local_sap` is the address that we're going to listen for connections on. If `reuse_addr` is 1 then we'll use the `SO_REUSEADDR` to reuse this address. Returns 0 on success and -1 on failure.

    int open (
        const ACE_Addr &local_sap,
        ACE_Protocol_Info *protocolinfo,
        ACE_SOCK_GROUP g,
        u_long flags,
        int reuse_addr,
        int protocol_family,
        int backlog = ACE_DEFAULT_BACKLOG,
        int protocol = 0
        );

Initialize a passive-mode QoS-enabled acceptor socket. Returns 0 on success and -1 on failure.

    ~ACE_SOCK_Acceptor (void);

Default dtor.

= Passive connection `accept` methods.

    int accept (
        ACE_SOCK_Stream &new_stream,
        ACE_Addr *remote_addr = 0,
        ACE_Time_Value *timeout = 0,
        int restart = 1,
        int reset_new_handle = 0
        ) const;

Accept a new `ACE_SOCK_Stream` connection. A `timeout` of 0 means block forever, a `timeout` of {0, 0} means poll. `restart` == 1 means "restart if interrupted," i.e., if errno == EINTR.

    int accept (
        ACE_SOCK_Stream &new_stream,
        ACE_Accept_QoS_Params qos_params,
        ACE_Addr *remote_addr = 0,
        ACE_Time_Value *timeout = 0,
        int restart = 1,
        int reset_new_handle = 0
        ) const;

Accept a new `ACE_SOCK_Stream` connection using the QoS information in `qos_params`. A `timeout` of 0 means block forever, a `timeout` of {0, 0} means poll. `restart` == 1 means "restart if interrupted," i.e., if errno == EINTR.

## Meta-type info

    typedef ACE_INET_Addr PEER_ADDR;

    typedef ACE_SOCK_Stream PEER_STREAM;

    void dump (void) const;

Dump the state of an object.

    ACE_ALLOC_HOOK_DECLARE;

Declare the dynamic allocation hooks.

## AUTHOR

Doug Schmidt

## LIBRARY

ace