= nng_respondent(7)
//
// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
//
// This document is supplied under the terms of the MIT License, a
// copy of which should be located in the distribution where this
// file was obtained (LICENSE.txt).  A copy of the license may also be
// found online at https://opensource.org/licenses/MIT.
//

== NAME

nng_respondent - respondent protocol

== SYNOPSIS

[source,c]
----------
#include <nng/protocol/survey0/respond.h>

int nng_respondent0_open(nng_socket *s);
----------

== DESCRIPTION

(((protocol, _respondent_)))
The ((_respondent_ protocol)) is one half of a ((survey pattern)).
In this pattern, a surveyor sends a survey, which is broadcast to all
peer respondents.
The respondents then have a chance to reply (but are not obliged to reply).
The survey itself is a timed event, so that responses
received after the survey has finished are discarded.

TIP: This protocol is useful in solving voting problems, such as leader
election in cluster configurations, as well as certain kinds of service
discovery problems.

The _respondent_ protocol is the respondent side, and the
<<nng_surveyor.7#,_surveyor_>> protocol is the surveyor side.

=== Socket Operations

The <<nng_respondent_open.3#,`nng_respondent0_open()`>> call creates a
respondent socket.
This socket may be used to receive messages, and then to send replies.
A reply can only be sent after receiving a survey, and generally the
reply will be sent to surveyor from whom the last survey was received.

Respondents may discard a survey by simply not replying to it. 

Raw mode sockets (set with <<nng_options.5#NNG_OPT_RAW,`NNG_OPT_RAW`>>)
ignore all these restrictions.

=== Protocol Versions

Only version 0 of this protocol is supported.
(At the time of writing, no other versions of this protocol have been defined.
An earlier and incompatible version of the protocol was used in older
pre-releases of http://nanomsg.org[nanomsg], but was not released in any
production version.)

=== Protocol Options

The _respondent_ protocol has no protocol-specific options.

=== Protocol Headers

(((backtrace)))
The _respondent_ protocol uses a _backtrace_ in the header.
This is more fully documented in the <<nng_surveyor.7#,_surveyor_>> manual.

// TODO: Insert reference to RFC.

== SEE ALSO

<<nng_respondent_open.3#,nng_respondent_open(3)>>,
<<nng_surveyor.7#,nng_surveyor(7)>>,
<<nng.7#,nng(7)>>
