// DialTimeout acts like Dial but takes timeouts for establishing the // connection to the server, writing a command and reading a reply. lv3 AppEngine func DialTimeout(cx appengine.Context, network, address string, connectTimeout, readTimeout, writeTimeout time.Duration) (Conn, error) { var c *socket.Conn var err error if connectTimeout > 0 { c, err = socket.DialTimeout(cx, network, address, connectTimeout) } else { c, err = socket.Dial(cx, network, address) } if err != nil { return nil, err } return NewConn(c, readTimeout, writeTimeout), nil }
func getCreateTunnelConn(context appengine.Context, uid string, ev *event.SocketConnectWithDataEvent) (*tunnelConn, bool, error) { created := false if c, exist := getTunnelConn(uid, ev.GetHash()); exist { if c.Addr == ev.Addr { return c, created, nil } else { closeTunnelConn(uid, ev.GetHash()) } } c := &tunnelConn{Net: ev.Net, Addr: ev.Addr} conn, err := socket.DialTimeout(context, ev.Net, ev.Addr, time.Duration(ev.Timeout)*time.Second) if nil == err { c.c = conn created = true saveTunnelConn(uid, ev.GetHash(), c) return c, created, nil } context.Errorf("[%d]Failed to connect %s for reason:%v", ev.GetHash(), ev.Addr, err) return nil, created, err }