NAME
NanoMsg::Raw - Low-level interface to the nanomsg scalability protocols library
SYNOPSIS
use Test::More;
use NanoMsg::Raw;
my $sb = nn_socket(AF_SP, NN_PAIR);
nn_bind($sb, 'inproc://foo');
my $sc = nn_socket(AF_SP, NN_PAIR);
nn_connect($sc, 'inproc://foo');
nn_send($sb, 'bar');
nn_recv($sc, my $buf);
is $buf, 'bar';
WARNING
nanomsg, the c library this module is based on, is still in beta stage!
DESCRIPTION
NanoMsg::Raw
is a binding to the nanomsg
C library. The goal of this module is to provide a very low-level and manual interface to all the functionality of the nanomsg library. It doesn't intend to provide a convenient high-level API, integration with event loops, or the like. Those are intended to be implemented as separate abstractions on top of NanoMsg::Raw
.
The nanomsg C library is a high-performance implementation of several "scalability protocols". Scalability protocol's job is to define how multiple applications communicate to form a single distributed application. Implementation of following scalability protocols is available at the moment:
PAIR
simple one-to-one communicationBUS
simple many-to-many communicationREQREP
allows one to build clusters of stateless services to process user requestsPUBSUB
distributes messages to large sets of interested subscribersPIPELINE
aggregates messages from multiple sources and load balances them among many destinationsSURVEY
allows one to query state of multiple applications in a single go
Scalability protocols are layered on top of transport layer in the network stack. At the moment, nanomsg library supports following transports:
INPROC
transport within a process (between threads, modules etc.)IPC
transport between processes on a single machineTCP
network transport via TCP
- nn_socket($domain, $protocol)
-
my $s = nn_socket(AF_SP, NN_PAIR); die nn_errno unless defined $s;
Creates a nanomsg 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 inAF_SP
sockets and thus can be used to implement intermediary devices in SP topologies.
The
$protocol
parameter defines the type of the socket, which in turn determines the exact semantics of the socket. See "Protocols" to get the list of available protocols and their 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
nn_bind
ornn_connect
.Also note that type argument as found in standard
socket
function is omitted fromnn_socket
. All the SP sockets are message-based and thus ofSOCK_SEQPACKET
type.If the function succeeds file descriptor of the new socket is returned. Otherwise,
undef
is returned andnn_errno
is set to to one of the values defined below.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.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).
- nn_close($s)
-
nn_close($s) or die nn_errno;
Closes the socket
$s
. Any buffered inbound messages that were not yet received by the application will be discarded. The library will try to deliver any outstanding outbound messages for the time specified byNN_LINGER
socket option. The call will block in the meantime.If the function succeeds, a true value is returned. Otherwise,
undef
is returned andnn_errno
is set to to one of the values defined below.EBADF
The provided socket is invalid.EINTR
Operation was interrupted by a signal. The socket is not fully closed yet. Operation can be re-started by callingnn_close
again.
- nn_setsockopt($s, $level, $option, $value)
-
nn_setsockopt($s, NN_SOL_SOCKET, NN_LINGER, 1000) or die nn_errno; nn_setsockopt($s, NN_SOL_SOCKET, NN_SUB_SUBSCRIBE, 'ABC') or die nn_errno;
Sets the
$value
of the socket option$option
. The$level
argument specifies the protocol level at which the option resides. For generic socket-level options use theNN_SOL_SOCKET
level. For socket-type-specific options use the socket type for the$level
argument (e.g.NN_SUB
). For transport-specific options use the ID of the transport as the$level
argument (e.g.NN_TCP
).If the function succeeds a true value is returned. Otherwise,
undef
is returned andnn_errno
is set to to one of the values defined below.EBADF
The provided socket is invalid.ENOPROTOOPT
The option is unknown at the level indicated.EINVAL
The specified option value is invalid.ETERM
The library is terminating.
These are the generic socket-level (
NN_SOL_SOCKET
level) options:NN_LINGER
Specifies how long the socket should try to send pending outbound messages afternn_close
has been called, in milliseconds. Negative values mean infinite linger. The type of the option is int. The default value is 1000 (1 second).NN_SNDBUF
Size of the send buffer, in bytes. To prevent blocking for messages larger than the buffer, exactly one message may be buffered in addition to the data in the send buffer. The type of this option is int. The default value is 128kB.NN_RCVBUF
Size of the receive buffer, in bytes. To prevent blocking for messages larger than the buffer, exactly one message may be buffered in addition to the data in the receive buffer. The type of this option is int. The default value is 128kB.NN_SNDTIMEO
The timeout for send operation on the socket, in milliseconds. If a message cannot be sent within the specified timeout, anEAGAIN
error is returned. Negative values mean infinite timeout. The type of the option is int. The default value is -1.NN_RCVTIMEO
The timeout for recv operation on the socket, in milliseconds. If a message cannot be received within the specified timeout, anEAGAIN
error is returned. Negative values mean infinite timeout. The type of the option is int. The default value is -1.NN_RECONNECT_IVL
For connection-based transports such as TCP, this option specifies how long to wait, in milliseconds, when connection is broken before trying to re-establish it. Note that actual reconnect interval may be randomised to some extent to prevent severe reconnection storms. The type of the option is int. The default value is 100 (0.1 second).NN_RECONNECT_IVL_MAX
This option is to be used only in addition toNN_RECONNECT_IVL
option. It specifies maximum reconnection interval. On each reconnect attempt, the previous interval is doubled untilNN_RECONNECT_IVL_MAX
is reached. A value of zero means that no exponential backoff is performed and reconnect interval is based only onNN_RECONNECT_IVL
. IfNN_RECONNECT_IVL_MAX
is less thanNN_RECONNECT_IVL
, it is ignored. The type of the option is int. The default value is 0.NN_SNDPRIO
Sets outbound priority for endpoints subsequently added to the socket. This option has no effect on socket types that send messages to all the peers. However, if the socket type sends each message to a single peer (or a limited set of peers), peers with high priority take precedence over peers with low priority. The type of the option is int. The highest priority is 1, the lowest priority is 16. The default value is 8.NN_IPV4ONLY
If set to 1, only IPv4 addresses are used. If set to 0, both IPv4 and IPv6 addresses are used. The default value is 1.
- nn_getsockopt($s, $level, $option)
-
my $linger = unpack 'i', nn_getsockopt($s, NN_SOL_SOCKET, NN_LINGER) || die nn_errno;
Retrieves the value for the socket option
$option
. The$level
argument specifies the protocol level at which the option resides. For generic socket-level options use theNN_SOL_SOCKET
level. For socket-type-specific options use the socket type for the$level
argument (e.g.NN_SUB
). For transport-specific options use ID of the transport as the$level
argument (e.g.NN_TCP
).The function returns a packed string representing the requested socket option, or
undef
on error, with one of the following reasons for the error placed innn_errno
.EBADF
The provided socket is invalid.ENOPROTOOPT
The option is unknown at the$level
indicated.ETERM
The library is terminating.
Just what is in the packed string depends on
$level
and$option
; see the list of socket options for details; A common case is that the option is an integer, in which case the result is a packed integer, which you can decode usingunpack
with thei
(orI
) format.This function can be used to retrieve the values for all the generic socket-level (
NN_SOL_SOCKET
) options documented innn_getsockopt
and also supports these additional generic socket-level options that can only be retrieved but not set:NN_DOMAIN
Returns the domain constant as it was passed tonn_socket
.NN_PROTOCOL
Returns the protocol constant as it was passed tonn_socket
.NN_SNDFD
Retrieves a file descriptor that is readable when a message can be sent to the socket. The descriptor should be used only for polling and never read from or written to. The type of the option is int. The descriptor becomes invalid and should not be used any more once the socket is closed. This socket option is not available for unidirectional recv-only socket types.NN_RCVFD
Retrieves a file descriptor that is readable when a message can be received from the socket. The descriptor should be used only for polling and never read from or written to. The type of the option is int. The descriptor becomes invalid and should not be used any more once the socket is closed. This socket option is not available for unidirectional send-only socket types.
- nn_bind($s, $addr)
-
my $eid = nn_bind($s, 'inproc://test'); die nn_errno unless defined $eid;
Adds a local endpoint to the socket
$s
. The endpoint can be then used by other applications to connect to.The
$addr
argument consists of two parts as follows:transport://address
. Thetransport
specifies the underlying transport protocol to use. The meaning of theaddress
part is specific to the underlying transport protocol.See "Transports" for a list of available transport protocols.
The maximum length of the
$addr
parameter is specified byNN_SOCKADDR_MAX
constant.Note that
nn_bind
andnn_connect
may be called multiple times on the same socket thus allowing the socket to communicate with multiple heterogeneous endpoints.If the function succeeds, an endpoint ID is returned. Endpoint ID can be later used to remove the endpoint from the socket via
nn_shutdown
function.If the function fails,
undef
is returned andnn_errno
is set to to one of the values defined below.EBADF
The provided socket is invalid.EMFILE
Maximum number of active endpoints was reached.EINVAL
The syntax of the supplied address is invalid.ENAMETOOLONG
The supplied address is too long.EPROTONOSUPPORT
The requested transport protocol is not supported.EADDRNOTAVAIL
The requested endpoint is not local.ENODEV
Address specifies a nonexistent interface.EADDRINUSE
The requested local endpoint is already in use.ETERM
The library is terminating.
- nn_connect($s, $addr)
-
my $eid = nn_connect($s, 'inproc://test'); die nn_errno unless defined $eid;
Adds a remote endpoint to the socket
$s
. The library would then try to connect to the specified remote endpoint.The
$addr
argument consists of two parts as follows:transport://address
. Thetransport
specifies the underlying transport protocol to use. The meaning of theaddress
part is specific to the underlying transport protocol.See "Protocols" for a list of available transport protocols.
The maximum length of the
$addr
parameter is specified byNN_SOCKADDR_MAX
constant.Note that
nn_connect
andnn_bind
may be called multiple times on the same socket thus allowing the socket to communicate with multiple heterogeneous endpoints.If the function succeeds, an endpoint ID is returned. Endpoint ID can be later used to remove the endpoint from the socket via
nn_shutdown
function.If the function fails,
undef
is returned andnn_errno
is set to to one of the values defined below.EBADF
The provided socket is invalid.EMFILE
Maximum number of active endpoints was reached.EINVAL
The syntax of the supplied address is invalid.ENAMETOOLONG
The supplied address is too long.EPROTONOSUPPORT
The requested transport protocol is not supported.ENODEV
Address specifies a nonexistent interface.ETERM
The library is terminating.
- nn_shutdown($s, $eid)
-
nn_shutdown($s, $eid) or die nn_errno;
Removes an endpoint from socket
$s
. Theeid
parameter specifies the ID of the endpoint to remove as returned by prior call tonn_bind
ornn_connect
.The
nn_shutdown
call will return immediately. However, the library will try to deliver any outstanding outbound messages to the endpoint for the time specified by theNN_LINGER
socket option.If the function succeeds, a true value is returned. Otherwise,
undef
is returned andnn_errno
is set to to one of the values defined below.EBADF
The provided socket is invalid.EINVAL
The how parameter doesn't correspond to an active endpoint.EINTR
Operation was interrupted by a signal. The endpoint is not fully closed yet. Operation can be re-started by callingnn_shutdown
again.ETERM
The library is terminating.
- nn_send($s, $data, $flags=0)
-
my $bytes_sent = nn_send($s, 'foo'); die nn_errno unless defined $bytes_sent;
This function will send a message containing the provided
$data
to the socket$s
.$data
can either be anything that can be used as a byte string in perl or a message buffer instance allocated bynn_allocmsg
. In case of a message buffer instance the instance will be deallocated and invalidated by thenn_send
function. The buffer will be an instance ofNanoMsg::Raw::Message::Freed
after the call tonn_send
.Which of the peers the message will be sent to is determined by the particular socket type.
The
$flags
argument, which defaults to0
, is a combination of the flags defined below:NN_DONTWAIT
Specifies that the operation should be performed in non-blocking mode. If the message cannot be sent straight away, the function will fail withnn_errno
set toEAGAIN
.
If the function succeeds, the number of bytes in the message is returned. Otherwise, a
undef
is returned andnn_errno
is set to to one of the values defined below.EBADF
The provided socket is invalid.ENOTSUP
The operation is not supported by this socket type.EFSM
The operation cannot be performed on this socket at the moment because the socket is not in the appropriate state. This error may occur with socket types that switch between several states.EAGAIN
Non-blocking mode was requested and the message cannot be sent at the moment.EINTR
The operation was interrupted by delivery of a signal before the message was sent.ETIMEDOUT
Individual socket types may define their own specific timeouts. If such timeout is hit, this error will be returned.ETERM
The library is terminating.
- nn_recv($s, $data, $length=NN_MSG, $flags=0)
-
my $bytes_received = nn_recv($s, my $buf, 256); die nn_errno unless defined $bytes_received;
Receive a message from the socket
$s
and store it in the buffer$buf
. Any bytes exceeding the length specified by the$length
argument will be truncated.Alternatively,
nn_recv
can allocate a message buffer instance for you. To do so, set the$length
parameter toNN_MSG
(the default).The
$flags
argument, which defaults to0
, is a combination of the flags defined below:NN_DONTWAIT
Specifies that the operation should be performed in non-blocking mode. If the message cannot be received straight away, the function will fail withnn_errno
set toEAGAIN
.
If the function succeeds number of bytes in the message is returned. Otherwise,
undef
is returned andnn_errno
is set to to one of the values defined below.EBADF
The provided socket is invalid.ENOTSUP
The operation is not supported by this socket type.EFSM
The operation cannot be performed on this socket at the moment because socket is not in the appropriate state. This error may occur with socket types that switch between several states.EAGAIN
Non-blocking mode was requested and there's no message to receive at the moment.EINTR
The operation was interrupted by delivery of a signal before the message was received.ETIMEDOUT
Individual socket types may define their own specific timeouts. If such timeout is hit this error will be returned.ETERM
The library is terminating.
- nn_sendmsg($s, $flags, $data1, $data2, ..., $dataN)
-
my $bytes_sent = nn_sendmsg($s, 0, 'foo', 'bar'); die nn_errno unless defined $bytes_sent;
This function is a fine-grained alternative to
nn_send
. It allows sending multiple data buffers that make up a single message without having to create another temporary buffer to hold the concatenation of the different message parts.The scalars containing the data to be sent (
$data1
,$data2
, ...,$dataN
) can either be anything that can be used as a byte string in perl or a message buffer instance allocated bynn_allocmsg
. In case of a message buffer instance the instance will be deallocated and invalidated by thenn_sendmsg
function. The buffers will be a instances ofNanoMsg::Raw::Message::Freed
after the call tonn_sendmsg
.When using message buffer instances, only one buffer may be provided.
To which of the peers will the message be sent to is determined by the particular socket type.
The
$flags
argument is a combination of the flags defined below:NN_DONTWAIT
Specifies that the operation should be performed in non-blocking mode. If the message cannot be sent straight away, the function will fail withnn_errno
set toEAGAIN
.
If the function succeeds number of bytes in the message is returned. Otherwise,
undef
is returned andnn_errno
is set to to one of the values defined below.EBADF
The provided socket is invalid.ENOTSUP
The operation is not supported by this socket type.EFSM
The operation cannot be performed on this socket at the moment because socket is not in the appropriate state. This error may occur with socket types that switch between several states.EAGAIN
Non-blocking mode was requested and the message cannot be sent at the moment.EINTR
The operation was interrupted by delivery of a signal before the message was sent.ETIMEDOUT
Individual socket types may define their own specific timeouts. If such timeout is hit this error will be returned.ETERM
The library is terminating.
In the future,
nn_sendmsg
might allow for sending along additional control data. - nn_recvmsg($s, $flags, $data1 => $len1, $data2 => $len2, ..., $dataN => $lenN)
-
my $bytes_received = nn_recvmsg($s, 0, my $buf1 => 256, my $buf2 => 1024); die nn_errno unless defined $bytes_received;
This function is a fine-grained alternative to
nn_recv
. It allows receiving a single message into multiple data buffers of different sizes, eliminating the need to create copies of part of the received message in some cases.The scalars in which to receive the message data (
$buf1
,$buf2
, ...,$bufN
) will be filled with as many bytes of data as is specified by the length parameter following them in the argument list ($len1
,$len2
, ...,$lenN
).Alternatively,
nn_recvmsg
can allocate a message buffer instance for you. To do so, set the length parameter of a buffer to toNN_MSG
. In this case, only one receive buffer can be provided.The
$flags
argument is a combination of the flags defined below:NN_DONTWAIT
Specifies that the operation should be performed in non-blocking mode. If the message cannot be received straight away, the function will fail withnn_errno
set toEAGAIN
.
In the future,
nn_recvmsg
might allow for receiving additional control data. - nn_allocmsg($size, $type)
-
my $msg = nn_allocmsg(3, 0) or die nn_errno; $msg->copy('foo'); nn_send($s, $msg);
Allocate a message of the specified
$size
to be sent in zero-copy fashion. The content of the message is undefined after allocation and it should be filled in by the user. Whilenn_send
andnn_sendmsg
allow one to send arbitrary buffers, buffers allocated usingnn_allocmsg
can be more efficient for large messages as they allow for using zero-copy techniques.The
$type
parameter specifies type of allocation mechanism to use. Zero is the default one. However, individual transport mechanisms may define their own allocation mechanisms, such as allocating in shared memory or allocating a memory block pinned down to a physical memory address. Such allocation, when used with the transport that defines them, should be more efficient than the default allocation mechanism.If the function succeeds a newly allocated message buffer instance (an object instance of the class NanoMsg::Raw::Message) is returned. Otherwise,
undef
is returned andnn_errno
is set to to one of the values defined below.EINVAL
Supplied allocation type is invalid.ENOMEM
Not enough memory to allocate the message.
- nn_errno()
-
Returns value of
errno
after the last call to any nanomsg function in the current thread. This function can be used in the same way the$!
global variable is be used for many other system and library calls.The return value can be used in numeric context, for example to compare it with error code constants such as
EAGAIN
, or in a string context, to retrieve a textual message describing the error. - nn_strerror($errno)
-
Returns a textual representation of the error described by the nummeric
$errno
provided. It shouldn't normally be necessary to ever call this function, as usingnn_errno
in string context is basically equivalent tonn_strerror(nn_errno)
. - nn_device($s1, $s2)
-
nn_device($s1, $s2) or die;
Starts a device to forward messages between two sockets. If both sockets are valid, the
nn_device
function loops and sends and messages received from$s1
to$s2
and vice versa. If only one socket is valid and the other isundef
,nn_device
works in a loopback mode - it loops and sends any messages received from the socket back to itself.The function loops until it hits an error. In such case it returns
undef
and setsnn_errno
to one of the values defined below.EBADF
One of the provided sockets is invalid.EINVAL
Either one of the socket is not anAF_SP_RAW
socket; or the two sockets don't belong to the same protocol; or the directionality of the sockets doesn't fit (e.g. attempt to join two SINK sockets to form a device).EINTR
The operation was interrupted by delivery of a signal.ETERM
The library is terminating.
- nn_term()
-
nn_term();
To help with shutdown of multi-threaded programs the
nn_term
function is provided. It informs all the open sockets that process termination is underway.If a socket is blocked inside a blocking function, such as
nn_recv
, it will be unblocked and theETERM
error will be returned to the user. Similarly, any subsequent attempt to invoke a socket function other thannn_close
afternn_term
was called will result in anETERM
error.If waiting for
NN_SNDFD
orNN_RCVFD
using a polling function, such aspoll
orselect
, the call will unblock with bothNN_SNDFD
andNN_RCVFD
signaled.The
nn_term
function itself is non-blocking.
Protocols
One-to-one protocol
Pair protocol is the simplest and least scalable scalability protocol. It allows scaling by breaking the application in exactly two pieces. For example, if a monolithic application handles both accounting and agenda of HR department, it can be split into two applications (accounting vs. HR) that are run on two separate servers. These applications can then communicate via PAIR sockets.
The downside of this protocol is that its scaling properties are very limited. Splitting the application into two pieces allows one to scale to two servers. To add the third server to the cluster, application has to be split once more, say be separating HR functionality into hiring module and salary computation module. Whenever possible, try to use one of the more scalable protocols instead.
Socket Types
NN_PAIR
Socket for communication with exactly one peer. Each party can send messages at any time. If the peer is not available or send buffer is full subsequent calls tonn_send
will block until it's possible to send the message.
Socket Options
No protocol-specific socket options are defined at the moment.
Request/reply protocol
This protocol is used to distribute the workload among multiple stateless workers.
Socket Types
NN_REQ
Used to implement the client application that sends requests and receives replies.NN_REP
Used to implement the stateless worker that receives requests and sends replies.
Socket Options
NN_REQ_RESEND_IVL
This option is defined on the full REQ socket. If a reply is not received in specified amount of milliseconds, the request will be automatically resent. The type of this option is int. Default value is 60000 (1 minute).
Publish/subscribe protocol
Broadcasts messages to multiple destinations.
Socket Types
NN_PUB
This socket is used to distribute messages to multiple destinations. Receive operation is not defined.NN_SUB
Receives messages from the publisher. Only messages that the socket is subscribed to are received. When the socket is created there are no subscriptions and thus no messages will be received. Send operation is not defined on this socket.
Socket Options
NN_SUB_SUBSCRIBE
Defined on full SUB socket. Subscribes for a particular topic. Type of the option is string.NN_SUB_UNSUBSCRIBE
Defined on full SUB socket. Unsubscribes from a particular topic. Type of the option is string.
Survey protocol
allows one to broadcast a survey to multiple locations and gather the responses.
Socket Types
NN_SURVEYOR
Used to send the survey. The survey is delivered to all the connected respondents. Once the query is sent, the socket can be used to receive the responses. When the survey deadline expires, receive will return theETIMEDOUT
error.NN_RESPONDENT
Use to respond to the survey. Survey is received using receive function, response is sent using send function. This socket can be connected to at most one peer.
Socket Options
NN_SURVEYOR_DEADLINE
Specifies how long to wait for responses to the survey. Once the deadline expires, receive function will return theETIMEDOUT
error and all subsequent responses to the survey will be silently dropped. The deadline is measured in milliseconds. Option type is int. Default value is 1000 (1 second).
Pipeline protocol
Fair queues messages from the previous processing step and load balances them among instances of the next processing step.
Socket Types
NN_PUSH
This socket is used to send messages to a cluster of load-balanced nodes. Receive operation is not implemented on this socket type.NN_PULL
This socket is used to receive a message from a cluster of nodes. Send operation is not implemented on this socket type.
Socket Options
No protocol-specific socket options are defined at the moment.
Message bus protocol
Broadcasts messages from any node to all other nodes in the topology. The socket should never receives messages that it sent itself.
This pattern scales only to local level (within a single machine or within a single LAN). Trying to scale it further can result in overloading individual nodes with messages.
WARNING: For bus topology to function correctly, the user is responsible for ensuring that path from each node to any other node exists within the topology.
Raw (AF_SP_RAW
) BUS socket never send the message to the peer it was received from.
Socket Types
NN_BUS
Sent messages are distributed to all nodes in the topology. Incoming messages from all other nodes in the topology are fair-queued in the socket.
Socket Options
There are no options defined at the moment.
Transports
In-process transport
The in-process transport allows one to send messages between threads or modules inside a process. In-process address is an arbitrary case-sensitive string preceded by inproc://
protocol specifier. All in-process addresses are visible from any module within the process. They are not visible from outside of the process.
The overall buffer size for an inproc connection is determined by the NN_RCVBUF
socket option on the receiving end of the connection. The NN_SNDBUF
socket option is ignored. In addition to the buffer, one message of arbitrary size will fit into the buffer. That way, even messages larger than the buffer can be transferred via inproc connection.
This transport's ID is NN_INPROC
.
Inter-process transport
The inter-process transport allows for sending messages between processes within a single box. The implementation uses native IPC mechanism provided by the local operating system and the IPC addresses are thus OS-specific.
On POSIX-compliant systems, UNIX domain sockets are used and IPC addresses are file references. Note that both relative (ipc://test.ipc
) and absolute (ipc:///tmp/test.ipc
) paths may be used. Also note that access rights on the IPC files must be set in such a way that the appropriate applications can actually use them.
On Windows, named pipes are used for IPC. IPC address is an arbitrary case-insensitive string containing any character except for backslash. Internally, address ipc://test
means that named pipe \\.\pipe\test
will be used.
This transport's ID is NN_IPC
.
TCP transport
The TCP transport allows for passing message over the network using simple reliable one-to-one connections. TCP is the most widely used transport protocol, it is virtually ubiquitous and thus the transport of choice for communication over the network.
When binding a TCP socket address of the form tcp://interface:port
should be used. Port is the TCP port number to use. Interface is one of the following (optionally placed within square brackets):
Asterisk character (*) meaning all local network interfaces.
IPv4 address of a local network interface in numeric form (192.168.0.111).
IPv6 address of a local network interface in numeric form (::1).
Interface name, as defined by operating system.
When connecting a TCP socket address of the form tcp://interface;address:port
should be used. Port is the TCP port number to use. Interface is optional and specifies which local network interface to use. If not specified, OS will select an appropriate interface itself. If specified it can be one of the following (optionally placed within square brackets):
IPv4 address of a local network interface in numeric form (192.168.0.111).
IPv6 address of a local network interface in numeric form (::1).
Interface name, as defined by operating system (eth0).
Finally, address specifies the remote address to connect to. It can be one of the following (optionally placed within square brackets):
IPv4 address of a remote network interface in numeric form (192.168.0.111).
IPv6 address of a remote network interface in numeric form (::1).
The DNS name of the remote box.
This transport's ID is NN_TCP
.
Socket Options
NN_TCP_NODELAY
This option, when set to 1, disables Nagle's algorithm. It also disables delaying of TCP acknowledgments. Using this option improves latency at the expense of throughput. Type of this option is int. The default value is 0.
Constants
In addition to all the error constants and NN_
constants used in the documentation of the individual functions, protocols, and transports, the following constants are available:
NN_VERSION_CURRENT
The current interface version.NN_VERSION_REVISION
The latest revision of the current interface.NN_VERSION_AGE
How many past interface versions are still supported.
SEE ALSO
The nanomsg C library documentation at http://nanomsg.org/v0.1/nanomsg.7.html The API this module provides is very close to the C library's interface, so the C documentation is likely to be useful to developers using Perl, too. Additionally, most of this module's documentation is copied from the C library documentation, so the upstream documentation might be somewhat more recent.