---
name: "ACE_SOCK_Connector"
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_Connector"
---

# ACE\_SOCK\_Connector(3)

Defines a factory that creates new ACE\_Streams actively.

## NAME

ACE\_SOCK\_Connector -  Defines a factory that creates new ACE\_Streams actively.

## SYNOPSIS

```
#include <ace/SOCK_Connector.h>
class ACE_SOCK_Connector
{
  public:
    ACE_SOCK_Connector (void);
    ACE_SOCK_Connector (
        ACE_SOCK_Stream &new_stream,
        const ACE_Addr &remote_sap,
        ACE_Time_Value *timeout = 0,
        const ACE_Addr &local_sap = ACE_Addr::sap_any,
        int reuse_addr = 0,
        int flags = 0,
        int perms = 0,
        int protocol_family = PF_INET,
        int protocol = 0
        );
    ACE_SOCK_Connector (
        ACE_SOCK_Stream &new_stream,
        const ACE_Addr &remote_sap,
        ACE_QoS_Params qos_params,
        ACE_Time_Value *timeout = 0,
        const ACE_Addr &local_sap = ACE_Addr::sap_any,
        ACE_Protocol_Info *protocolinfo = 0,
        ACE_SOCK_GROUP g = 0,
        u_long flags = 0,
        int reuse_addr = 0,
        int perms = 0,
        int protocol_family = PF_INET,
        int protocol = 0
        );
    int connect (
        ACE_SOCK_Stream &new_stream,
        const ACE_Addr &remote_sap,
        ACE_Time_Value *timeout = 0,
        const ACE_Addr &local_sap = ACE_Addr::sap_any,
        int reuse_addr = 0,
        int flags = 0,
        int perms = 0,
        int protocol_family = PF_INET,
        int protocol = 0
        );
    int connect (
        ACE_SOCK_Stream &new_stream,
        const ACE_Addr &remote_sap,
        ACE_QoS_Params qos_params,
        ACE_Time_Value *timeout = 0,
        const ACE_Addr &local_sap = ACE_Addr::sap_any,
        ACE_Protocol_Info *protocolinfo = 0,
        ACE_SOCK_GROUP g = 0,
        u_long flags = 0,
        int reuse_addr = 0,
        int perms = 0,
        int protocol_family = PF_INET,
        int protocol = 0
        );
    ~ACE_SOCK_Connector (void);
    int complete (
        ACE_SOCK_Stream &new_stream,
        ACE_Addr *remote_sap = 0,
        ACE_Time_Value *timeout = 0
        );
    int reset_new_handle (ACE_HANDLE handle);
    typedef ACE_INET_Addr PEER_ADDR;
    typedef ACE_SOCK_Stream PEER_STREAM;
    void dump (void) const;
    ACE_ALLOC_HOOK_DECLARE;
  protected:
    int shared_open (
        ACE_SOCK_Stream &new_stream,
        int protocol_family,
        int protocol,
        int reuse_addr
        );
    int shared_open (
        ACE_SOCK_Stream &new_stream,
        int protocol_family,
        int protocol,
        ACE_Protocol_Info *protocolinfo,
        ACE_SOCK_GROUP g,
        u_long flags,
        int reuse_addr
        );
    int shared_connect_start (
        ACE_SOCK_Stream &new_stream,
        ACE_Time_Value *timeout,
        const ACE_Addr &local_sap
        );
    int shared_connect_finish (
        ACE_SOCK_Stream &new_stream,
        ACE_Time_Value *timeout,
        int result
        );
};
```

## DESCRIPTION

The ACE\_SOCK\_Connector doesn't have a socket of its own, i.e., it simply "borrows" the one from the ACE\_SOCK\_Stream that's being connected.  The reason for this is that the underlying socket API doesn't use a "factory" socket to connect "data-mode" sockets.  Therefore, there's no need to inherit ACE\_SOCK\_Connector from ACE\_SOCK.  A nice side-effect of this is that ACE\_SOCK\_Connector's do not store state so they can be used reentrantly in multi-threaded programs.

## Initialization and termination methods.

```
ACE_SOCK_Connector (void);
```

Default constructor.

```
ACE_SOCK_Connector (
    ACE_SOCK_Stream &new_stream,
    const ACE_Addr &remote_sap,
    ACE_Time_Value *timeout = 0,
    const ACE_Addr &local_sap = ACE_Addr::sap_any,
    int reuse_addr = 0,
    int flags = 0,
    int perms = 0,
    int protocol_family = PF_INET,
    int protocol = 0
    );
```

Actively connect and produce a new\_stream if things go well. The remote\_sap is the address that we are trying to connect with.  The timeout is the amount of time to wait to connect. If it's 0 then we block indefinitely.  If \*timeout == {0, 0} then the connection is done using non-blocking mode.  In this case, if the connection can't be made immediately the value of -1 is returned with errno == EWOULDBLOCK.  If \*timeout  {0, 0} then this is the amount of time to wait before timing out.  If the time expires before the connection is made errno == ETIME.  The local\_sap is the value of local address to bind to.  If it's the default value of ACE\_Addr::sap\_any then the user is letting the OS do the binding.  If reuse\_addr == 1 then the local\_addr is reused, even if it hasn't been cleanedup yet.

```
ACE_SOCK_Connector (
    ACE_SOCK_Stream &new_stream,
    const ACE_Addr &remote_sap,
    ACE_QoS_Params qos_params,
    ACE_Time_Value *timeout = 0,
    const ACE_Addr &local_sap = ACE_Addr::sap_any,
    ACE_Protocol_Info *protocolinfo = 0,
    ACE_SOCK_GROUP g = 0,
    u_long flags = 0,
    int reuse_addr = 0,
    int perms = 0,
    int protocol_family = PF_INET,
    int protocol = 0
    );
```

Actively connect and produce a new\_stream if things go well. The remote\_sap is the address that we are trying to connect with.  The qos\_params contains QoS parameters that are passed to the IntServ (RSVP) and DiffServ protocols.  The timeout is the amount of time to wait to connect.  If it's 0 then we block indefinitely.  If \*timeout == {0, 0} then the connection is done using non-blocking mode.  In this case, if the connection can't be made immediately the value of -1 is returned with errno == EWOULDBLOCK.  If \*timeout  {0, 0} then this is the amount of time to wait before timing out.  If the time expires before the connection is made errno == ETIME.  The local\_sap is the value of local address to bind to.  If it's the default value of ACE\_Addr::sap\_any then the user is letting the OS do the binding.  If reuse\_addr == 1 then the local\_addr is reused, even if it hasn't been cleanedup yet.

```
int connect (
    ACE_SOCK_Stream &new_stream,
    const ACE_Addr &remote_sap,
    ACE_Time_Value *timeout = 0,
    const ACE_Addr &local_sap = ACE_Addr::sap_any,
    int reuse_addr = 0,
    int flags = 0,
    int perms = 0,
    int protocol_family = PF_INET,
    int protocol = 0
    );
```

Actively connect and produce a new\_stream if things go well. The remote\_sap is the address that we are trying to connect with.  The timeout is the amount of time to wait to connect. If it's 0 then we block indefinitely.  If \*timeout == {0, 0} then the connection is done using non-blocking mode.  In this case, if the connection can't be made immediately the value of -1 is returned with errno == EWOULDBLOCK.  If \*timeout  {0, 0} then this is the amount of time to wait before timing out.  If the time expires before the connection is made errno == ETIME.  The local\_sap is the value of local address to bind to.  If it's the default value of ACE\_Addr::sap\_any then the user is letting the OS do the binding.  If reuse\_addr == 1 then the local\_addr is reused, even if it hasn't been cleanedup yet. Note that the new\_stream always starts out in blocking mode.

```
int connect (
    ACE_SOCK_Stream &new_stream,
    const ACE_Addr &remote_sap,
    ACE_QoS_Params qos_params,
    ACE_Time_Value *timeout = 0,
    const ACE_Addr &local_sap = ACE_Addr::sap_any,
    ACE_Protocol_Info *protocolinfo = 0,
    ACE_SOCK_GROUP g = 0,
    u_long flags = 0,
    int reuse_addr = 0,
    int perms = 0,
    int protocol_family = PF_INET,
    int protocol = 0
    );
```

Actively connect and produce a new\_stream if things go well. The remote\_sap is the address that we are trying to connect with.  The qos\_params contains QoS parameters that are passed to the IntServ (RSVP) and DiffServ protocols.  The timeout is the amount of time to wait to connect.  If it's 0 then we block indefinitely.  If \*timeout == {0, 0} then the connection is done using non-blocking mode.  In this case, if the connection can't be made immediately the value of -1 is returned with errno == EWOULDBLOCK.  If \*timeout  {0, 0} then this is the amount of time to wait before timing out.  If the time expires before the connection is made errno == ETIME.  The local\_sap is the value of local address to bind to.  If it's the default value of ACE\_Addr::sap\_any then the user is letting the OS do the binding.  If reuse\_addr == 1 then the local\_addr is reused, even if it hasn't been cleanedup yet.

```
~ACE_SOCK_Connector (void);
```

Default dtor.

## Completion routine.

```
int complete (
    ACE_SOCK_Stream &new_stream,
    ACE_Addr *remote_sap = 0,
    ACE_Time_Value *timeout = 0
    );
```

Try to complete a non-blocking connection. If connection completion is successful then new\_stream contains the connected ACE\_SOCK\_Stream.  If remote\_sap is non-NULL then it will contain the address of the connected peer.

```
int reset_new_handle (ACE_HANDLE handle);
```

Resets any event associations on this handle

## 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
