Skip to content

Instantly share code, notes, and snippets.

@Bo0mer
Created August 29, 2016 07:35
Show Gist options
  • Save Bo0mer/2151250f2704076faa7ba250455cd376 to your computer and use it in GitHub Desktop.
Save Bo0mer/2151250f2704076faa7ba250455cd376 to your computer and use it in GitHub Desktop.
SetsockoptInt example
package main
import (
"fmt"
"log"
"net"
"os"
"syscall"
"time"
)
const req = `GET / HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.43.0
Accept: */*
`
func main() {
s, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_STREAM, 6)
if err != nil {
log.Fatal(err)
}
if err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_RCVBUF, 256); err != nil {
log.Fatal(err)
}
addr := &syscall.SockaddrInet4{
Port: 8080,
Addr: [4]byte{127, 0, 0, 1},
}
if err := syscall.Connect(s, addr); err != nil {
log.Fatal(err)
}
f := os.NewFile(uintptr(s), "name")
if err != nil {
log.Fatal(err)
}
defer f.Close()
c, err := net.FileConn(f)
if err != nil {
log.Fatal(err)
}
c.Write([]byte(req))
time.Sleep(time.Second * 10)
buf := make([]byte, 1024*20)
n, err := c.Read(buf)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(buf))
fmt.Printf("total of %d bytes\n", n)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment