25
25
26
26
pub struct Server {
27
27
mut :
28
- state ServerStatus = .closed
29
- listener net.TcpListener
28
+ state ServerStatus = .closed
30
29
pub mut :
31
- port int = 8080
30
+ addr string = ':8080' // change to ':8080' when port is removed
31
+ port int [deprecated: 'use addr' ] = 8080
32
32
handler Handler = DebugHandler{}
33
33
read_timeout time.Duration = 30 * time.second
34
34
write_timeout time.Duration = 30 * time.second
35
35
accept_timeout time.Duration = 30 * time.second
36
36
pool_channel_slots int = 1024
37
37
worker_num int = runtime.nr_jobs ()
38
+ listener net.TcpListener
38
39
}
39
40
40
41
// listen_and_serve listens on the server port `s.port` over TCP network and
@@ -43,10 +44,28 @@ pub fn (mut s Server) listen_and_serve() {
43
44
if s.handler is DebugHandler {
44
45
eprintln ('Server handler not set, using debug handler' )
45
46
}
46
- s.listener = net.listen_tcp (.ip6 , ':${s.port} ' ) or {
47
- eprintln ('Listening on :${s.port} failed' )
47
+
48
+ // remove when s.port is removed
49
+ addr := s.addr.split (':' )
50
+ if addr.len > 1 && s.port != 8080 {
51
+ s.addr = '${addr[0]} :${s.port} '
52
+ }
53
+
54
+ mut l := s.listener.addr () or {
55
+ eprintln ('Failed getting listener address' )
48
56
return
49
57
}
58
+ if l.family () == net.AddrFamily.unspec {
59
+ s.listener = net.listen_tcp (.ip6 , '${s.addr} ' ) or {
60
+ eprintln ('Listening on ${s.addr} failed' )
61
+ return
62
+ }
63
+ l = s.listener.addr () or {
64
+ eprintln ('Failed getting listener address' )
65
+ return
66
+ }
67
+ }
68
+ s.addr = l.str ()
50
69
s.listener.set_accept_timeout (s.accept_timeout)
51
70
52
71
// Create tcp connection channel
@@ -58,7 +77,7 @@ pub fn (mut s Server) listen_and_serve() {
58
77
ws << new_handler_worker (wid, ch, s.handler)
59
78
}
60
79
61
- eprintln ('Listening on : ${s.port } ' )
80
+ eprintln ('Listening on ${s.addr } ' )
62
81
s.state = .running
63
82
for {
64
83
// break if we have a stop signal
0 commit comments