From 7fbf2c26ac063988818230a0e18a9df48c2fbf2d Mon Sep 17 00:00:00 2001
From: Steve Vinoski
Date: Tue, 27 Aug 2013 11:42:00 -0400
Subject: add {active,N} socket option for TCP, UDP, and SCTP
Add the {active,N} socket option, where N is an integer in the range
-32768..32767, to allow a caller to specify the number of data messages to
be delivered to the controlling process. Once the socket's delivered
message count either reaches 0 or is explicitly set to 0 with
inet:setopts/2 or by including {active,0} as an option when the socket is
created, the socket transitions to passive ({active, false}) mode and the
socket's controlling process receives a message to inform it of the
transition. TCP sockets receive {tcp_passive,Socket}, UDP sockets receive
{udp_passive,Socket} and SCTP sockets receive {sctp_passive,Socket}.
The socket's delivered message counter defaults to 0, but it can be set
using {active,N} via any gen_tcp, gen_udp, or gen_sctp function that takes
socket options as arguments, or via inet:setopts/2. New N values are added
to the socket's current counter value, and negative numbers can be used to
reduce the counter value. Specifying a number that would cause the socket's
counter value to go above 32767 causes an einval error. If a negative
number is specified such that the counter value would become negative, the
socket's counter value is set to 0 and the socket transitions to passive
mode. If the counter value is already 0 and inet:setopts(Socket,
[{active,0}]) is specified, the counter value remains at 0 but the
appropriate passive mode transition message is generated for the socket.
This commit contains a modified preloaded prim_inet.beam due to changes in
prim_inet.erl.
Add tests for {active,N} mode for TCP, UDP, and SCTP sockets.
Add documentation for {active,N} mode for inet, gen_tcp, gen_udp, and
gen_sctp.
---
lib/kernel/doc/src/gen_sctp.xml | 31 +++++++++++++++++++++++++------
1 file changed, 25 insertions(+), 6 deletions(-)
(limited to 'lib/kernel/doc/src/gen_sctp.xml')
diff --git a/lib/kernel/doc/src/gen_sctp.xml b/lib/kernel/doc/src/gen_sctp.xml
index dacea7a239..986260638d 100644
--- a/lib/kernel/doc/src/gen_sctp.xml
+++ b/lib/kernel/doc/src/gen_sctp.xml
@@ -496,9 +496,11 @@
orthogonal to the sets of TCP, UDP and generic INET options:
only those options which are explicitly listed below are allowed
for SCTP sockets. Options can be set on the socket using
- gen_sctp:open/1,2 or inet:setopts/2,
- retrieved using inet:getopts/2, and when calling
- gen_sctp:connect/4,5 options can be changed.
+ gen_sctp:open/1,2
+ or inet:setopts/2,
+ retrieved using inet:getopts/2,
+ and when calling gen_sctp:connect/4,5
+ options can be changed.
@@ -507,7 +509,7 @@
Determines the type of data returned from gen_sctp:recv/1,2.
- {active, true|false|once}
+ {active, true|false|once|N}
-
-
@@ -524,11 +526,28 @@
-
If once, only one message is automatically placed
- in the message queue, after that the mode is automatically
- re-set to passive. This provides flow control as well as
+ in the message queue, and after that the mode is automatically
+ reset to passive. This provides flow control as well as
the possibility for the receiver to listen for its incoming
SCTP data interleaved with other inter-process messages.
+ -
+
If active is specified as an integer N in the
+ range -32768 to 32767 (inclusive), then that number is added to
+ the socket's count of the number of data messages to be
+ delivered to the controlling process. If the result of the
+ addition would be negative, the count is set to 0. Once the
+ count reaches 0, either through the delivery of messages or by
+ being explicitly set with inet:setopts/2, the socket's
+ mode is automatically reset to passive ({active,
+ false}) mode. When a socket in this active mode transitions to
+ passive mode, the message {sctp_passive, Socket} is sent
+ to the controlling process to notify it that if it wants to
+ receive more data messages from the socket, it must call
+ inet:setopts/2 to set
+ the socket back into an active mode.
+
{tos, integer()}
--
cgit v1.2.3