Last active
March 6, 2017 20:39
-
-
Save grepory/6a0f3a44ffa7faa8d75a833c6d385f3d to your computer and use it in GitHub Desktop.
Example of first write succeeding, but second write failing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"net/http" | |
"time" | |
"github.com/gorilla/websocket" | |
) | |
func main() { | |
done := make(chan struct{}, 1) | |
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { | |
conn, _ := (&websocket.Upgrader{}).Upgrade(w, r, nil) | |
conn.Close() | |
done <- struct{}{} | |
}) | |
go http.ListenAndServe(":10080", nil) | |
time.Sleep(100 * time.Millisecond) | |
conn, _, _ := websocket.DefaultDialer.Dial("ws://localhost:10080", nil) | |
<-done | |
time.Sleep(1 * time.Second) | |
err := conn.WriteMessage(websocket.BinaryMessage, []byte("message")) | |
if err != nil { | |
panic(fmt.Sprintf("first write failed: %s", err.Error())) | |
} | |
fmt.Println("first write succeeded") | |
err = conn.WriteMessage(websocket.BinaryMessage, []byte("message")) | |
if err != nil { | |
fmt.Printf("second write failed: %s\n", err.Error()) | |
} | |
conn, _, _ = websocket.DefaultDialer.Dial("ws://localhost:10080", nil) | |
<-done | |
time.Sleep(1 * time.Second) | |
writer, err := conn.NextWriter(websocket.BinaryMessage) | |
if err != nil { | |
fmt.Printf("first NextWriter failed: %s\n", err.Error()) | |
} | |
n, err := writer.Write([]byte("message")) | |
if err != nil { | |
fmt.Printf("writer write failed: %s\n", err.Error()) | |
} | |
fmt.Printf("writer wrote %d bytes\n", n) | |
err = writer.Close() | |
if err != nil { | |
fmt.Printf("writer close failed: %s\n", err.Error()) | |
} | |
fmt.Println("writer closed successfully") | |
writer, err = conn.NextWriter(websocket.BinaryMessage) | |
if err != nil { | |
fmt.Printf("second wrtier failed: %s\n", err.Error()) | |
} | |
fmt.Println("Got second writer.") | |
_, _, err = conn.ReadMessage() | |
if err != nil { | |
fmt.Printf("first read failed: %s\n", err.Error()) | |
} | |
_, _, err = conn.NextReader() | |
if err != nil { | |
fmt.Printf("first nextreader failed: %s\n", err.Error()) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment