Skip to content

Instantly share code, notes, and snippets.

@krishnasrinivas
Created April 5, 2016 14:06
Show Gist options
  • Save krishnasrinivas/09f7e616ecef290a6bbc3d0b96924748 to your computer and use it in GitHub Desktop.
Save krishnasrinivas/09f7e616ecef290a6bbc3d0b96924748 to your computer and use it in GitHub Desktop.
libchan server streams a file
package main
import (
"io"
"log"
"net"
"os"
"github.com/docker/libchan/spdy"
)
type Request struct {
Name string
Stdout io.WriteCloser
}
func main() {
l, err := net.Listen("tcp", "localhost:9001")
if err != nil {
log.Fatal(err)
}
for {
c, err := l.Accept()
if err != nil {
log.Fatal(err)
}
p, err := spdy.NewSpdyStreamProvider(c, true)
if err != nil {
log.Fatal(err)
}
t := spdy.NewTransport(p)
go func() {
for {
receiver, err := t.WaitReceiveChannel()
if err != nil {
log.Println(err)
break
}
go func() {
for {
req := &Request{}
err := receiver.Receive(req)
if err != nil {
log.Println(err)
break
}
f, err := os.Open(req.Name)
if err != nil {
log.Println(err)
break
}
io.Copy(req.Stdout, f)
}
}()
}
}()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment