-USING: calendar classes concurrency.semaphores help.markup
-help.syntax io io.sockets io.sockets.secure math quotations ;
+USING: calendar classes concurrency.semaphores help.markup help.syntax
+io io.servers.private io.sockets io.sockets.secure quotations
+sequences ;
IN: io.servers
ARTICLE: "server-config" "Threaded server configuration"
ABOUT: "io.servers"
+HELP: configurable-addrspecs
+{ $values { "addrspecs" sequence } { "addrspecs'" sequence } }
+{ $description "Filter the list of addrspecs so that only those that are supported by the host system remains." } ;
+
HELP: threaded-server
{ $var-description "In client handlers, stores the current threaded server instance." }
{ $class-description "The class of threaded servers. New instances are created with " { $link <threaded-server> } ". This class may be subclassed, and instances of subclasses should be created with " { $link new-threaded-server } ". See " { $link "server-config" } " for slot documentation." } ;
0 >>insecure
start-server [ '[ _ wait-for-server ] in-thread ] [ stop-server ] bi
] unit-test
+
+ipv6-supported? [
+ { f } [
+ ascii <threaded-server>
+ "localhost" 1234 inet boa >>insecure
+ listen-on
+ [ inet6? ] any?
+ ] unit-test
+] unless
M: f >insecure ;
: >secure ( addrspec -- addrspec' )
- >insecure
- [ dup secure? [ <secure> ] unless ] map ;
+ >insecure [ dup secure? [ <secure> ] unless ] map ;
+
+: configurable-addrspecs ( addrspecs -- addrspecs' )
+ [ inet6? not ipv6-supported? or ] filter ;
: listen-on ( threaded-server -- addrspecs )
[ secure>> ssl-supported? [ >secure ] [ drop { } ] if ]
- [ insecure>> >insecure ]
- bi append
- [ resolve-host ] map concat ;
+ [ insecure>> >insecure ] bi append
+ [ resolve-host ] map concat configurable-addrspecs ;
: accepted-connection ( remote local -- )
[