Skip to content

Instantly share code, notes, and snippets.

@lixin9311
Last active January 4, 2017 14:16
Show Gist options
  • Save lixin9311/847b51e44898deabe34794d223c1a7c7 to your computer and use it in GitHub Desktop.
Save lixin9311/847b51e44898deabe34794d223c1a7c7 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"log"
"time"
"net"
"github.com/lixin9311/water"
)
func main() {
ifce, err := water.NewTAP("O_O")
if err != nil {
log.Println("Failed open")
log.Fatal(err)
}
frame := make([]byte, 1500)
conn, err := net.ListenPacket("udp", ":1234")
if err != nil {
log.Fatal(err)
}
addr, err := net.ResolveUDPAddr("udp", "192.168.1.9:1234")
if err != nil {
log.Fatal(err)
}
handleClient := func(conn net.PacketConn) {
buffer := make([]byte, 1500)
for {
n, paddr, err := conn.ReadFrom(buffer)
if err != nil {
log.Fatal(err)
}
addr = paddr.(*net.UDPAddr)
start := time.Now()
if _, err := ifce.Write(buffer[:n]); err != nil {
log.Println("Failed write")
log.Fatal(err)
}
fmt.Printf("took %s\n", time.Since(start))
}
}
go handleClient(conn)
for {
n, err := ifce.Read(frame)
if err != nil {
log.Println("Failed read")
log.Fatal(err)
}
conn.WriteTo(frame[:n], addr)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment