OLD | NEW |
1 // Copyright 2017 The LUCI Authors. All rights reserved. | 1 // Copyright 2017 The LUCI Authors. All rights reserved. |
2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
4 | 4 |
5 package streamserver | 5 package streamserver |
6 | 6 |
7 import ( | 7 import ( |
8 "fmt" | 8 "fmt" |
9 "net" | 9 "net" |
10 | 10 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 // exported stream server parameters (externally) or by calling Address | 50 // exported stream server parameters (externally) or by calling Address |
51 // (internally). | 51 // (internally). |
52 func NewTCP6Server(ctx context.Context, spec string) (StreamServer, error) { | 52 func NewTCP6Server(ctx context.Context, spec string) (StreamServer, error) { |
53 return newTCPServerImpl(ctx, "tcp6", spec, net.IPv6loopback) | 53 return newTCPServerImpl(ctx, "tcp6", spec, net.IPv6loopback) |
54 } | 54 } |
55 | 55 |
56 // Listen implements StreamServer. | 56 // Listen implements StreamServer. |
57 func newTCPServerImpl(ctx context.Context, netType, spec string, loopback net.IP
) (StreamServer, error) { | 57 func newTCPServerImpl(ctx context.Context, netType, spec string, loopback net.IP
) (StreamServer, error) { |
58 tcpAddr, err := net.ResolveTCPAddr(netType, spec) | 58 tcpAddr, err := net.ResolveTCPAddr(netType, spec) |
59 if err != nil { | 59 if err != nil { |
60 » » return nil, errors.Annotate(err).Reason("could not resolve %(net
)q address %(addr)q"). | 60 » » return nil, errors.Annotate(err, "could not resolve %q address %
q", netType, spec).Err() |
61 » » » D("net", netType). | |
62 » » » D("addr", spec). | |
63 » » » Err() | |
64 } | 61 } |
65 | 62 |
66 if tcpAddr.IP == nil { | 63 if tcpAddr.IP == nil { |
67 tcpAddr.IP = loopback | 64 tcpAddr.IP = loopback |
68 } | 65 } |
69 | 66 |
70 return &listenerStreamServer{ | 67 return &listenerStreamServer{ |
71 Context: ctx, | 68 Context: ctx, |
72 address: fmt.Sprintf("%s:%s", netType, tcpAddr.String()), | 69 address: fmt.Sprintf("%s:%s", netType, tcpAddr.String()), |
73 gen: func() (net.Listener, string, error) { | 70 gen: func() (net.Listener, string, error) { |
74 l, err := net.ListenTCP(netType, tcpAddr) | 71 l, err := net.ListenTCP(netType, tcpAddr) |
75 if err != nil { | 72 if err != nil { |
76 » » » » return nil, "", errors.Annotate(err).Reason("fai
led to listen to %(net)q address %(addr)q"). | 73 » » » » return nil, "", errors.Annotate(err, "failed to
listen to %q address %q", netType, tcpAddr).Err() |
77 » » » » » D("net", netType). | |
78 » » » » » D("addr", tcpAddr). | |
79 » » » » » Err() | |
80 } | 74 } |
81 | 75 |
82 addr := fmt.Sprintf("%s:%s", netType, l.Addr().String()) | 76 addr := fmt.Sprintf("%s:%s", netType, l.Addr().String()) |
83 log.Fields{ | 77 log.Fields{ |
84 "addr": addr, | 78 "addr": addr, |
85 }.Debugf(ctx, "Listening on %q stream server...", netTyp
e) | 79 }.Debugf(ctx, "Listening on %q stream server...", netTyp
e) |
86 return l, addr, nil | 80 return l, addr, nil |
87 }, | 81 }, |
88 }, nil | 82 }, nil |
89 } | 83 } |
OLD | NEW |