2929 targetServer string
3030 port string
3131 messageReader message.Reader
32+ timeout time.Duration
3233 l net.Listener
3334 quit chan struct {}
3435 wg * sync.WaitGroup
@@ -42,19 +43,20 @@ const (
4243 Packet
4344)
4445
45- func deadline () time.Time {
46- return time .Now ().Add (60 * time .Second )
47- }
48-
49- func New (targetServer , port string , messageReader message.Reader ) Multiplexer {
46+ func New (targetServer , port string , messageReader message.Reader , timeout time.Duration ) Multiplexer {
5047 return Multiplexer {
5148 targetServer : targetServer ,
5249 port : port ,
5350 messageReader : messageReader ,
5451 quit : make (chan struct {}),
52+ timeout : timeout ,
5553 }
5654}
5755
56+ func (mux * Multiplexer ) deadline () time.Time {
57+ return time .Now ().Add (mux .timeout )
58+ }
59+
5860func (mux * Multiplexer ) Start () error {
5961 var err error
6062 mux .l , err = net .Listen ("tcp" , ":" + mux .port )
@@ -112,7 +114,7 @@ func (mux *Multiplexer) handleConnection(conn net.Conn, sender chan<- *reqContai
112114 callback := make (chan * respContainer )
113115
114116 for {
115- err := conn .SetReadDeadline (deadline ())
117+ err := conn .SetReadDeadline (mux . deadline ())
116118 if err != nil {
117119 slog .Error (fmt .Sprintf ("error setting read deadline: %v" , err ))
118120 }
@@ -143,7 +145,7 @@ func (mux *Multiplexer) handleConnection(conn net.Conn, sender chan<- *reqContai
143145 }
144146
145147 // write back
146- err = conn .SetWriteDeadline (deadline ())
148+ err = conn .SetWriteDeadline (mux . deadline ())
147149 if err != nil {
148150 slog .Error (fmt .Sprintf ("error setting write deadline: %v" , err ))
149151 }
@@ -201,7 +203,7 @@ func (mux *Multiplexer) targetConnLoop(requestQueue <-chan *reqContainer) {
201203 conn = mux .createTargetConn ()
202204 }
203205
204- err := conn .SetWriteDeadline (deadline ())
206+ err := conn .SetWriteDeadline (mux . deadline ())
205207 if err != nil {
206208 slog .Error (fmt .Sprintf ("error setting write deadline: %v" , err ))
207209 }
@@ -222,7 +224,7 @@ func (mux *Multiplexer) targetConnLoop(requestQueue <-chan *reqContainer) {
222224 continue
223225 }
224226
225- err = conn .SetReadDeadline (deadline ())
227+ err = conn .SetReadDeadline (mux . deadline ())
226228 if err != nil {
227229 slog .Error (fmt .Sprintf ("error setting read deadline: %v" , err ))
228230 }
0 commit comments