USING: accessors arrays concurrency.flags fry io io.encodings.ascii io.encodings.utf8 io.servers.private io.sockets kernel namespaces sequences sets threads tools.test ; IN: io.servers { t } [ ascii listen-on empty? ] unit-test { f } [ ascii 25 internet-server >>insecure listen-on empty? ] unit-test { t } [ T{ inet4 f "1.2.3.4" 1234 } T{ inet4 f "1.2.3.5" 1235 } [ log-connection ] 2keep [ remote-address get = ] [ local-address get = ] bi* and ] unit-test { } [ ascii init-server drop ] unit-test { 10 } [ ascii 10 >>max-connections init-server semaphore>> count>> ] unit-test { "Hello world." } [ ascii 5 >>max-connections 0 >>insecure [ "Hello world." write stop-this-server ] >>handler [ insecure-addr ascii drop stream-contents ] with-threaded-server ] unit-test { } [ ascii 5 >>max-connections 0 >>insecure start-server [ '[ _ wait-for-server ] in-thread ] [ stop-server ] bi ] unit-test ipv6-supported? [ { f } [ ascii "localhost" 1234 inet boa >>insecure listen-on [ inet6? ] any? ] unit-test ] unless ! Test that we can listen on several ports at once. TUPLE: my-threaded-server < threaded-server ; { } [ utf8 my-threaded-server new-threaded-server "127.0.0.1" 0 "127.0.0.1" 0 2array >>insecure "127.0.0.1" 0 "127.0.0.1" 0 2array >>secure start-server stop-server ] unit-test ! add-running-server [ ascii HS{ } clone 2dup adjoin add-running-server ] [ server-already-running? ] must-fail-with ! stop-server [ ascii >>server-stopped stop-server ] [ server-not-running? ] must-fail-with