nn_socket(3)
============

NAME
----
nn_socket - create an SP socket


SYNOPSIS
--------
*#include <nanomsg/nn.h>*

*int nn_socket (int 'domain', int 'protocol');*


DESCRIPTION
-----------
Creates an SP socket with specified 'domain' and 'protocol'. Returns a file
descriptor for the newly created socket.

Following domains are defined at the moment:

*AF_SP*::
Standard full-blown SP socket.

*AF_SP_RAW*::
Raw SP socket. Raw sockets omit the end-to-end functionality found in AF_SP
sockets and thus can be used to implement intermediary devices in SP topologies.

'protocol' parameter defines the type of the socket, which in turn determines
the exact semantics of the socket. Check manual pages for individual SP
protocols to get the list of available socket types.

The newly created socket is initially not associated with any endpoints.
In order to establish a message flow at least one endpoint has to be added
to the socket using linknanomsg:nn_bind[3] or linknanomsg:nn_connect[3]
function.

Also note that 'type' argument as found in standard _socket(2)_ function is
omitted from _nn_socket_. All the SP sockets are message-based and thus of
_SOCK_SEQPACKET_ type.


RETURN VALUE
------------
If the function succeeds file descriptor of the new socket is returned.
Otherwise, negative number is returned and 'errno' is set to to one of
the values defined below.

Note that file descriptors returned by _nn_socket_ function are not standard
file descriptors and will exhibit undefined behaviour when used with system
functions. Moreover, it may happen that a system file descriptor and file
descriptor of an SP socket will incidentally collide (be equal).


ERRORS
------
*EAFNOSUPPORT*::
Specified address family is not supported.
*EINVAL*::
Unknown protocol.
*EMFILE*::
The limit on the total number of open SP sockets or OS limit for file
descriptors has been reached.
*ETERM*::
The library is terminating.

EXAMPLE
-------

----
int s = nn_socket (AF_SP, NN_PUB);
assert (s >= 0);
----


SEE ALSO
--------
linknanomsg:nn_pubsub[7]
linknanomsg:nn_reqrep[7]
linknanomsg:nn_pipeline[7]
linknanomsg:nn_survey[7]
linknanomsg:nn_bus[7]
linknanomsg:nn_bind[3]
linknanomsg:nn_connect[3]
linknanomsg:nn_close[3]
linknanomsg:nanomsg[7]

AUTHORS
-------
Martin Sustrik <sustrik@250bpm.com>

