summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2018-04-11 15:09:44 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2018-04-11 15:09:44 +0000
commit1e3f94aba1c47b689546ae8ac2e4ba6b1f1774c2 (patch)
tree71ebfb14c6045af1d0e5ee6a507fa67bcfe721e4
parentdfaa5da1f7e07903480a853a061e2221c532d8b9 (diff)
downloads6-networking-1e3f94aba1c47b689546ae8ac2e4ba6b1f1774c2.tar.xz
Add -B (blocking) option to s6-tcpserver?-socketbinder
-rw-r--r--.gitignore33
-rw-r--r--doc/s6-tcpserver4-socketbinder.html5
-rw-r--r--doc/s6-tcpserver6-socketbinder.html5
-rw-r--r--src/conn-tools/s6-tcpserver4-socketbinder.c9
-rw-r--r--src/conn-tools/s6-tcpserver6-socketbinder.c9
5 files changed, 48 insertions, 13 deletions
diff --git a/.gitignore b/.gitignore
index 5c6415e..50104d3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,32 @@
+/config.mak
+/src/include/s6-networking/config.h
*.o
-*.a
*.lo
-*.so
-*.so.*
+/libs6net.a.xyzzy
+/libs6net.so.xyzzy
+/libsbearssl.a.xyzzy
+/libsbearssl.so.xyzzy
+/libstls.a.xyzzy
+/libstls.so.xyzzy
+/minidentd
+/s6-clockadd
+/s6-clockview
+/s6-getservbyname
+/s6-ident-client
+/s6-sntpclock
+/s6-taiclock
+/s6-taiclockd
+/s6-tcpclient
+/s6-tcpserver
+/s6-tcpserver-access
+/s6-tcpserver4
+/s6-tcpserver4-socketbinder
+/s6-tcpserver4d
+/s6-tcpserver6
+/s6-tcpserver6-socketbinder
+/s6-tcpserver6d
+/s6-tlsc
+/s6-tlsclient
+/s6-tlsd
+/s6-tlsserver
+/src/minidentd/mgetuid.c
diff --git a/doc/s6-tcpserver4-socketbinder.html b/doc/s6-tcpserver4-socketbinder.html
index 2345f2f..1e86e6d 100644
--- a/doc/s6-tcpserver4-socketbinder.html
+++ b/doc/s6-tcpserver4-socketbinder.html
@@ -26,7 +26,7 @@ socket to an IPv4 address and port, then executes a program.
<h2> Interface </h2>
<pre>
- s6-tcpserver4-socketbinder [ -d | -D ] [ -b <em>backlog</em> ] [ -M | -m ] <em>ip</em> <em>port</em> <em>prog...</em>
+ s6-tcpserver4-socketbinder [ -d | -D ] [ -b <em>backlog</em> ] [ -M | -m ] [ -B ] <em>ip</em> <em>port</em> <em>prog...</em>
</pre>
<ul>
@@ -57,12 +57,13 @@ listening</strong>. </li>
that by default UDP sockets are not connection-mode, and <tt>listen()</tt>
will fail - so you should always give the <tt>-b0</tt> option to
s6-tcpserver4-socketbinder along with <tt>-m</tt>. </li>
+ <li> <tt>-B</tt>&nbsp;: create a blocking socket. Default is non-blocking. </li>
</ul>
<h2> Notes </h2>
<ul>
- <li> The socket is provided <strong>non-blocking</strong>. </li>
+ <li> The socket is provided <strong>non-blocking by default</strong>. </li>
<li> s6-tcpserver4-socketbinder is part of a set of basic blocks used to
build a flexible TCP/IPv4 super-server. It normally should be given a
command line crafted to make it execute into
diff --git a/doc/s6-tcpserver6-socketbinder.html b/doc/s6-tcpserver6-socketbinder.html
index 948f68b..b72da33 100644
--- a/doc/s6-tcpserver6-socketbinder.html
+++ b/doc/s6-tcpserver6-socketbinder.html
@@ -26,7 +26,7 @@ socket to an IPv6 address and port, then executes a program.
<h2> Interface </h2>
<pre>
- s6-tcpserver6-socketbinder [ -d | -D ] [ -b <em>backlog</em> ] [ -M | -m ] <em>ip</em> <em>port</em> <em>prog...</em>
+ s6-tcpserver6-socketbinder [ -d | -D ] [ -b <em>backlog</em> ] [ -M | -m ] [ -B ] <em>ip</em> <em>port</em> <em>prog...</em>
</pre>
<ul>
@@ -57,12 +57,13 @@ listening</strong>. </li>
that by default UDP sockets are not connection-mode, and <tt>listen()</tt>
will fail - so you should always give the <tt>-b0</tt> option to
s6-tcpserver6-socketbinder along with <tt>-m</tt>. </li>
+ <li> <tt>-B</tt>&nbsp;: create a blocking socket. Default is non-blocking. </li>
</ul>
<h2> Notes </h2>
<ul>
- <li> The socket is provided <strong>non-blocking</strong>. </li>
+ <li> The socket is provided <strong>non-blocking by default</strong>. </li>
<li> s6-tcpserver6-socketbinder is part of a set of basic blocks used to
build a flexible TCP/IPv6 super-server. It normally should be given a
command line crafted to make it execute into
diff --git a/src/conn-tools/s6-tcpserver4-socketbinder.c b/src/conn-tools/s6-tcpserver4-socketbinder.c
index e32eb4f..bcd9ee1 100644
--- a/src/conn-tools/s6-tcpserver4-socketbinder.c
+++ b/src/conn-tools/s6-tcpserver4-socketbinder.c
@@ -10,7 +10,7 @@
#include <skalibs/djbunix.h>
#include <skalibs/socket.h>
-#define USAGE "s6-tcpserver4-socketbinder [ -d | -D ] [ -b backlog ] [ -M | -m ] ip4 port prog..."
+#define USAGE "s6-tcpserver4-socketbinder [ -d | -D ] [ -b backlog ] [ -M | -m ] [ -B ] ip4 port prog..."
#define dieusage() strerr_dieusage(100, USAGE)
int main (int argc, char const *const *argv, char const *const *envp)
@@ -18,6 +18,7 @@ int main (int argc, char const *const *argv, char const *const *envp)
unsigned int backlog = SOMAXCONN ;
int flagreuse = 1 ;
int flagudp = 0 ;
+ int flagblocking = 0 ;
char ip[4] ;
uint16_t port ;
PROG = "s6-tcpserver4-socketbinder" ;
@@ -25,7 +26,7 @@ int main (int argc, char const *const *argv, char const *const *envp)
subgetopt_t l = SUBGETOPT_ZERO ;
for (;;)
{
- int opt = subgetopt_r(argc, argv, "DdMmb:", &l) ;
+ int opt = subgetopt_r(argc, argv, "DdMmBb:", &l) ;
if (opt == -1) break ;
switch (opt)
{
@@ -33,6 +34,7 @@ int main (int argc, char const *const *argv, char const *const *envp)
case 'd' : flagreuse = 1 ; break ;
case 'M' : flagudp = 0 ; break ;
case 'm' : flagudp = 1 ; break ;
+ case 'B' : flagblocking = 1 ; break ;
case 'b' : if (!uint0_scan(l.arg, &backlog)) dieusage() ; break ;
default : dieusage() ;
}
@@ -42,7 +44,8 @@ int main (int argc, char const *const *argv, char const *const *envp)
if (argc < 3) dieusage() ;
if (!ip4_scan(argv[0], ip) || !uint160_scan(argv[1], &port)) dieusage() ;
close(0) ;
- if (flagudp ? socket_udp4() : socket_tcp4()) strerr_diefu1sys(111, "create socket") ;
+ if (flagudp ? socket_udp4_internal(flagblocking ? 0 : DJBUNIX_FLAG_NB) : socket_tcp4_internal(flagblocking ? 0 : DJBUNIX_FLAG_NB))
+ strerr_diefu1sys(111, "create socket") ;
if ((flagreuse ? socket_bind4_reuse(0, ip, port) : socket_bind4(0, ip, port)) < 0)
strerr_diefu5sys(111, "bind to ", argv[0], ":", argv[1], " ") ;
if (backlog && socket_listen(0, backlog) < 0)
diff --git a/src/conn-tools/s6-tcpserver6-socketbinder.c b/src/conn-tools/s6-tcpserver6-socketbinder.c
index 143bfe9..1c4835b 100644
--- a/src/conn-tools/s6-tcpserver6-socketbinder.c
+++ b/src/conn-tools/s6-tcpserver6-socketbinder.c
@@ -10,7 +10,7 @@
#include <skalibs/djbunix.h>
#include <skalibs/socket.h>
-#define USAGE "s6-tcpserver6-socketbinder [ -d | -D ] [ -b backlog ] [ -M | -m ] ip6 port prog..."
+#define USAGE "s6-tcpserver6-socketbinder [ -d | -D ] [ -b backlog ] [ -M | -m ] [ -B ] ip6 port prog..."
#define dieusage() strerr_dieusage(100, USAGE)
int main (int argc, char const *const *argv, char const *const *envp)
@@ -18,6 +18,7 @@ int main (int argc, char const *const *argv, char const *const *envp)
unsigned int backlog = SOMAXCONN ;
int flagreuse = 1 ;
int flagudp = 0 ;
+ int flagblocking = 0 ;
char ip[16] ;
uint16_t port ;
PROG = "s6-tcpserver6-socketbinder" ;
@@ -25,7 +26,7 @@ int main (int argc, char const *const *argv, char const *const *envp)
subgetopt_t l = SUBGETOPT_ZERO ;
for (;;)
{
- int opt = subgetopt_r(argc, argv, "DdMmb:", &l) ;
+ int opt = subgetopt_r(argc, argv, "DdMmBb:", &l) ;
if (opt == -1) break ;
switch (opt)
{
@@ -33,6 +34,7 @@ int main (int argc, char const *const *argv, char const *const *envp)
case 'd' : flagreuse = 1 ; break ;
case 'M' : flagudp = 0 ; break ;
case 'm' : flagudp = 1 ; break ;
+ case 'B' : flagblocking = 1 ; break ;
case 'b' : if (!uint0_scan(l.arg, &backlog)) dieusage() ; break ;
default : dieusage() ;
}
@@ -42,7 +44,8 @@ int main (int argc, char const *const *argv, char const *const *envp)
if (argc < 3) dieusage() ;
if (!ip6_scan(argv[0], ip) || !uint160_scan(argv[1], &port)) dieusage() ;
close(0) ;
- if (flagudp ? socket_udp6() : socket_tcp6()) strerr_diefu1sys(111, "create socket") ;
+ if (flagudp ? socket_udp6_internal(flagblocking ? 0 : DJBUNIX_FLAG_NB) : socket_tcp6_internal(flagblocking ? 0 : DJBUNIX_FLAG_NB))
+ strerr_diefu1sys(111, "create socket") ;
if ((flagreuse ? socket_bind6_reuse(0, ip, port) : socket_bind6(0, ip, port)) < 0)
strerr_diefu5sys(111, "bind to ", argv[0], ":", argv[1], " ") ;
if (backlog && socket_listen(0, backlog) < 0)