# sctp_connectx

## NAME



           sctp_connectx - initiate a connection on an SCTP socket using
           multiple destination addresses.
    


## SYNOPSIS



           **#include <sys/types.h>**
           **#include <sys/socket.h>**
           **#include <netinet/sctp.h>**
    
           **int sctp_connectx(int** _sd_**, struct sockaddr ***_addrs_**, int** _addrcnt,_
                             **sctp_assoc_t  ***_id_**);**
    


## DESCRIPTION



           **sctp_connectx** initiates a connection to a set of addresses passed
           in the array _addrs_ to/from the socket _sd._  _addrcnt_ is the number
           of addresses in the array.
    
           If _sd_ is an IPv4 socket, the addresses passed must be IPv4
           addresses. If _sd_ is an IPv6 socket, the addresses passed can be
           either IPv4 or IPv6 addresses.
    
           _addrs_ is a pointer to an array of one or more socket addresses.
           Each address is contained in its appropriate structure(i.e. struct
           sockaddr_in or struct sockaddr_in6). The family of the address
           type must be used to distinguish the address length. The caller
           specifies the number of addresses in the array with _addrcnt._
    
           _id_ is a pointer to the association id and, if provided, will be
           set to the identifier of the newly created association.
    


## RETURN VALUE



           On success, 0 is returned. On failure, -1 is returned, and _errno_
           is set appropriately.
    


## ERRORS



           **EBADF** _sd_ is not a valid descriptor.
    
           **ENOTSOCK**
                  _sd_ is a descriptor for a file, not a socket.
    
           **EFAULT** Error while copying in or out from the user address space.
    
           **EINVAL** Invalid port or address.
    
           **EACCES** The address is protected, and the user is not the super-
                  user.
    
           **EISCONN**
                  The socket is already connected.
    
           **ECONNREFUSED**
                  No one listening on the remote address.
    
           **ETIMEDOUT**
                  Timeout while attempting connection. The server may be too
                  busy to accept new connections. Note that for IP sockets
                  the timeout may be very long when syncookies are enabled on
                  the server.
    
           **ENETUNREACH**
                  Network is unreachable.
    
           **EADDRINUSE**
                  Local address is already in use.
    
           **EINPROGRESS**
                  The socket is non-blocking and the connection cannot be
                  completed immediately.  It is possible to select(2) or
                  poll(2) for completion by selecting the socket for writing.
                  After **select** indicates writability, use getsockopt(2) to
                  read the **SO_ERROR** option at level **SOL_SOCKET** to determine
                  whether **connect** completed successfully (**SO_ERROR** is zero)
                  or unsuccessfully (**SO_ERROR** is one of the usual error codes
                  listed here, explaining the reason for the failure).
    
           **EALREADY**
                  The socket is non-blocking and a previous connection
                  attempt has not yet been completed.
    
           **EAGAIN** No more free local ports or insufficient entries in the
                  routing cache. For **PF_INET** see the
                  **net.ipv4.ip_local_port_range** sysctl in ip(7) on how to
                  increase the number of local ports.
    
           **EAFNOSUPPORT**
                  The passed address didn't have the correct address family
                  in its _sa_family_ field.
    
           **EACCES, EPERM**
                  The user tried to connect to a broadcast address without
                  having the socket broadcast flag enabled or the connection
                  request failed because of a local firewall rule.
    


* * *