/* Register a monitoring callback. See: http://api.zeromq.org/3-2:zmq-socket-monitor#toc2 Example: package main import ( zmq "github.com/pebbe/zmq3" "log" "time" ) func rep_socket_monitor(addr string) { s, err := zmq.NewSocket(zmq.PAIR) if err != nil { log.Fatalln(err) } err = s.Connect(addr) if err != nil { log.Fatalln(err) } for { a, b, c, err := s.RecvEvent(0) if err != nil { log.Println(err) break } log.Println(a, b, c) } } func main() { // REP socket rep, err := zmq.NewSocket(zmq.REP) if err != nil { log.Fatalln(err) } defer rep.Close() // REP socket monitor, all events err = rep.Monitor("inproc://monitor.rep", zmq.EVENT_ALL) if err != nil { log.Fatalln(err) } go rep_socket_monitor("inproc://monitor.rep") // Generate an event rep.Bind("tcp://*:5555") if err != nil { log.Fatalln(err) } // Allow some time for event detection time.Sleep(time.Second) } */ func (soc *Socket) Monitor(addr string, events Event) error { s := C.CString(addr) defer C.free(unsafe.Pointer(s)) if i, err := C.zmq_socket_monitor(soc.soc, s, C.int(events)); i != 0 { return errget(err) } return nil }
/* Register a monitoring callback. See: http://api.zeromq.org/4-1:zmq-socket-monitor#toc2 WARNING: Closing a context with a monitoring callback will lead to random crashes. This is a bug in the ZeroMQ library. The monitoring callback has the same context as the socket it was created for. Example: package main import ( zmq "github.com/pebbe/zmq4" "log" "time" ) func rep_socket_monitor(addr string) { s, err := zmq.NewSocket(zmq.PAIR) if err != nil { log.Fatalln(err) } err = s.Connect(addr) if err != nil { log.Fatalln(err) } for { a, b, c, err := s.RecvEvent(0) if err != nil { log.Println(err) break } log.Println(a, b, c) } s.Close() } func main() { // REP socket rep, err := zmq.NewSocket(zmq.REP) if err != nil { log.Fatalln(err) } // REP socket monitor, all events err = rep.Monitor("inproc://monitor.rep", zmq.EVENT_ALL) if err != nil { log.Fatalln(err) } go rep_socket_monitor("inproc://monitor.rep") // Generate an event rep.Bind("tcp://*:5555") if err != nil { log.Fatalln(err) } // Allow some time for event detection time.Sleep(time.Second) rep.Close() zmq.Term() } */ func (soc *Socket) Monitor(addr string, events Event) error { if !soc.opened { return ErrorSocketClosed } if addr == "" { if i, err := C.zmq_socket_monitor(soc.soc, nil, C.int(events)); i != 0 { return errget(err) } return nil } s := C.CString(addr) defer C.free(unsafe.Pointer(s)) if i, err := C.zmq_socket_monitor(soc.soc, s, C.int(events)); i != 0 { return errget(err) } return nil }
// Register a monitoring callback endpoint. // int zmq_socket_monitor (void *s, const char *addr, int events); func (s *Socket) Monitor(address string, events Event) error { a := C.CString(address) defer C.free(unsafe.Pointer(a)) rc, err := C.zmq_socket_monitor(s.apiSocket(), a, C.int(events)) if rc == -1 { return casterr(err) } return nil }