func TestZmqChanSocket(t *testing.T) { var sb, sc *zmq.Socket var cb, cc zmqchan.ChanSocket var err error num := 10 defer func() { if sb != nil { sb.SetLinger(0) sb.Close() } if sc != nil { sc.SetLinger(0) sc.Close() } if cb != nil { log.Println("MAIN: Close") cb.Close() } if cc != nil { log.Println("ECHO: Close") cc.Close() } log.Println("BOTH: Exit") }() if sb, err = zmq.NewSocket(zmq.PAIR); err != nil { t.Fatal("NewSocket:", err) } if sc, err = zmq.NewSocket(zmq.PAIR); err != nil { t.Fatal("NewSocket:", err) } if err = sb.Bind("tcp://127.0.0.1:9737"); err != nil { t.Fatal("sb.Bind:", err) } if err = sc.Connect("tcp://127.0.0.1:9737"); err != nil { t.Fatal("sc.Connect:", err) } if cb, err = zmqchan.NewZmqChanSocket(sb, 0, 0); err != nil { t.Fatal("sb.NewZmqChanSocket:", err) } sb = nil // don't access this or close it on defer if cc, err = zmqchan.NewZmqChanSocket(sc, 0, 0); err != nil { t.Fatal("sb.NewZmqChanSocket:", err) } sc = nil // don't access this or close it on defer var wg sync.WaitGroup wg.Add(1) go func() { runEcho(t, num, cc) wg.Done() }() wg.Add(1) go func() { runWrite(t, num, cb) wg.Done() }() wg.Wait() log.Println("BOTH: done") }