Skip to content

Instantly share code, notes, and snippets.

@grepory
Last active March 6, 2017 20:39
Show Gist options
  • Save grepory/6a0f3a44ffa7faa8d75a833c6d385f3d to your computer and use it in GitHub Desktop.
Save grepory/6a0f3a44ffa7faa8d75a833c6d385f3d to your computer and use it in GitHub Desktop.
Example of first write succeeding, but second write failing
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