Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "encoding/gob"
- "fmt"
- "net"
- "time"
- "os"
- "sync"
- )
- const (
- dataStr string = "This is my string. There are many like it. But this one is mine."
- rounds int = 1
- )
- type tester struct {
- T time.Time
- X net.IP
- D []byte
- M map[string]([]byte)
- }
- type testa struct {
- X, Y, Z uint64
- Msg []byte
- }
- func main() {
- var wg sync.WaitGroup
- lst, err := net.Listen("unix", "/tmp/comms")
- if err != nil {
- fmt.Printf("listen error: %v\n", err)
- os.Exit(-1)
- }
- defer lst.Close()
- conn, err := net.Dial("unix", "/tmp/comms")
- if err != nil {
- fmt.Printf("connect error: %v\n", err)
- os.Exit(-1)
- }
- defer conn.Close()
- wg.Add(2)
- go reader(lst, &wg)
- go writer(conn, &wg)
- wg.Wait()
- }
- func writer(conn net.Conn, wg *sync.WaitGroup) {
- var err error
- var i int
- genc := gob.NewEncoder(conn)
- ip := net.ParseIP("BE::EF")
- for i = 0; i < rounds; i++ {
- err = genc.Encode(tester{time.Now(), ip, []byte(dataStr), nil})
- if err != nil {
- fmt.Printf("Encode error: %v\n", err)
- os.Exit(-1)
- }
- }
- err = genc.Encode(tester{time.Now(), nil, nil, nil})
- if err != nil {
- fmt.Printf("Failed to encode the nil message\n")
- os.Exit(-1)
- }
- fmt.Printf("Threw nil entry after %d rounds\n", i)
- err = genc.Encode(testa{1, 2, 3, []byte("HERE IS YOUR MESSAGE")})
- if err != nil {
- fmt.Printf("Failed to encode testa message\n")
- os.Exit(-1)
- }
- wg.Done()
- }
- func reader(lst net.Listener, wg *sync.WaitGroup) {
- var t tester
- var ta testa
- conn, err := lst.Accept()
- if err != nil {
- fmt.Printf("Accept error: %v\n", err)
- os.Exit(-1)
- }
- defer conn.Close()
- gdec := gob.NewDecoder(conn)
- for i := 0; ; i++{
- err := gdec.Decode(&t)
- if err != nil {
- fmt.Printf("Decode error on #%d: %v\n", i, err)
- os.Exit(-1)
- }
- if t.D == nil || len(t.D) == 0 {
- fmt.Printf("Got the nil message\n")
- break
- }
- }
- err = gdec.Decode(&ta)
- if err != nil {
- fmt.Printf("She is dead jim...\n")
- os.Exit(-1)
- }
- if string(ta.Msg) != "HERE IS YOUR MESSAGE" {
- fmt.Printf("Failed to get the message out\n")
- os.Exit(-1)
- }
- wg.Done()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement