Browse Source

switch back to Close() calls since CloseRead() seems to cause sockets not to flush their writes

Alan Shreve 12 years ago
parent
commit
148702929b
3 changed files with 6 additions and 7 deletions
  1. 2 4
      src/ngrok/conn/conn.go
  2. 3 2
      src/ngrok/server/control.go
  3. 1 1
      src/ngrok/server/main.go

+ 2 - 4
src/ngrok/conn/conn.go

@@ -189,8 +189,8 @@ func Join(c Conn, c2 Conn) (int64, int64) {
 	var wait sync.WaitGroup
 
 	pipe := func(to Conn, from Conn, bytesCopied *int64) {
-		defer to.CloseRead()
-		defer from.CloseRead()
+		defer to.Close()
+		defer from.Close()
 		defer wait.Done()
 
 		var err error
@@ -208,8 +208,6 @@ func Join(c Conn, c2 Conn) (int64, int64) {
 	go pipe(c2, c, &toBytes)
 	c.Info("Joined with connection %s", c2.Id())
 	wait.Wait()
-	c.Close()
-	c2.Close()
 	return fromBytes, toBytes
 }
 

+ 3 - 2
src/ngrok/server/control.go

@@ -263,8 +263,9 @@ func (c *Control) stopper() {
 	controlRegistry.Del(c.id)
 
 	// close the connection's read side so that reader() stops
-	c.conn.CloseRead()
-	c.readerShutdown.WaitComplete()
+	// XXX: disabled since this doesn't seem to play nicely with SO_LINGER
+	// c.conn.CloseRead()
+	// c.readerShutdown.WaitComplete()
 
 	// shutdown manager() so that we have no more work to do
 	close(c.in)

+ 1 - 1
src/ngrok/server/main.go

@@ -68,7 +68,7 @@ func tunnelListener(addr string, tlsConfig *tls.Config) {
 			// don't crash on panics
 			defer func() {
 				if r := recover(); r != nil {
-					tunnelConn.Info("Control::manager failed with error %v: %s", r, debug.Stack())
+					tunnelConn.Info("tunnelListener failed with error %v: %s", r, debug.Stack())
 				}
 			}()