nbaconnect()

Initiate a connection on a socket (nonblocking)

Synopsis:

#include <sys/socket.h>

int nbaconnect( int s, 
                const struct sockaddr * name,
                size_t namelen );

Arguments:

s
The descriptor of the socket on which to initiate the connection.
name
The name of the socket to connect to for a SOCK_STREAM connection.
namelen
The length of the name, in bytes.

Library:

libsocket

Use the -l socket option to qcc to link against this library.

Description:

The nbaconnect() function is called in place of connect() , to prevent a nonblocking connect() from blocking during an autoconnect.

When the autoconnect behavior is used, connect() may block your application while waiting for the autoconnect to complete; nbaconnect() allows your application to continue executing during the autoconnect.

The nbaconnect() function takes the same arguments as connect() , but it differs in the return value when an autoconnect is required. If an autoconnect is required, a file descriptor (fd) is returned. The fd is used in the call to nbaconnect_result() to get the errno related to the autoconnect and the connect attempt.

Since nbaconnect_result() is a blocking call, it's recommended that you call select() first to determine if there's data available on the pipe.

When the data's available, call nbaconnect_result() to get the status of the nbaconnect() attempt.

If an autoconnect isn't required, nbaconnect() returns -1 and exhibits the same behavior as connect() on nonblocking sockets (e.g. if -1 is returned and errno is set to EINPROGRESS, it's possible to do a select() for completion by selecting the socket for writing).

Returns:

A file descriptor that you can pass to nbaconnect_result() to get the result of the nbaconnect() attempt, or -1 if an error occurred ( errno is set).

Errors:

Any value from the Errors section in connect() , as well as:

EINVAL
The socket file descriptor being passed isn't nonblocking.

Classification:

QNX Neutrino

Safety:  
Cancellation point Yes
Interrupt handler No
Signal handler No
Thread Yes

Caveats:

The pipe manager must be available.

Last modified: 2013-12-23

comments powered by Disqus