// Recv waits for the specific timeout in milliseconds to receive a beacon func (b *Beacon) Recv(timeout int) [][]byte { C.zsock_set_rcvtimeo(unsafe.Pointer(b.zactorT), C.int(timeout)) cAddrFrame := C.zframe_recv(unsafe.Pointer(b.zactorT)) defer C.zframe_destroy(&cAddrFrame) if cAddrFrame == nil { return nil } addr := C.GoBytes(unsafe.Pointer(C.zframe_data(cAddrFrame)), C.int(C.zframe_size(cAddrFrame))) cBeaconFrame := C.zframe_recv(unsafe.Pointer(b.zactorT)) defer C.zframe_destroy(&cBeaconFrame) if cBeaconFrame == nil { return nil } beacon := C.GoBytes(unsafe.Pointer(C.zframe_data(cBeaconFrame)), C.int(C.zframe_size(cBeaconFrame))) return [][]byte{addr, beacon} }
// RecvFrame reads a frame from the socket and returns it // as a byte array, along with a more flag and and error // (if there is an error) func (s *Sock) RecvFrame() ([]byte, int, error) { frame := C.zframe_recv(unsafe.Pointer(s.zsockT)) if frame == nil { return []byte{0}, 0, errors.New("failed") } dataSize := C.zframe_size(frame) dataPtr := C.zframe_data(frame) b := C.GoBytes(unsafe.Pointer(dataPtr), C.int(dataSize)) more := C.zframe_more(frame) C.zframe_destroy(&frame) return b, int(more), nil }
// RecvFrame reads a frame from the socket and returns it // as a byte array, along with a more flag and and error // (if there is an error) func (s *Sock) RecvFrame() ([]byte, int, error) { if s.zsockT == nil { return nil, -1, ErrRecvFrameAfterDestroy } frame := C.zframe_recv(unsafe.Pointer(s.zsockT)) if frame == nil { return []byte{0}, 0, ErrRecvFrame } dataSize := C.zframe_size(frame) dataPtr := C.zframe_data(frame) b := C.GoBytes(unsafe.Pointer(dataPtr), C.int(dataSize)) more := C.zframe_more(frame) C.zframe_destroy(&frame) return b, int(more), nil }