// Send a message to the socket. // int zmq_send (void *s, zmq_msg_t *msg, int flags); func (s *zmqSocket) Send(data []byte, flags SendRecvOption) error { var m C.zmq_msg_t // Copy data array into C-allocated buffer. size := C.size_t(len(data)) if C.zmq_msg_init_size(&m, size) != 0 { return errno() } if size > 0 { // FIXME Ideally this wouldn't require a copy. C.memcpy(unsafe.Pointer(C.zmq_msg_data(&m)), unsafe.Pointer(&data[0]), size) // XXX I hope this works...(seems to) } if C.zmq_sendmsg(s.s, &m, C.int(flags)) != 0 { // zmq_send did not take ownership, free message C.zmq_msg_close(&m) return errno() } return nil }
func MessageInitSize(message ZMessage, size int) os.Error { return handle(C.zmq_msg_init_size(message.Ptr, C.size_t(size))) }
func toMsg(msg *C.zmq_msg_t, data []byte) { C.zmq_msg_init_size(msg, C.size_t(len(data))) if len(data) > 0 { C.memcpy(C.zmq_msg_data(msg), unsafe.Pointer(&data[0]), C.size_t(len(data))) } }
func (p *lzmqMessage) allocate(length int) os.Error { return p.Provider().OkIf(C.zmq_msg_init_size(p.ptr(), C.size_t(length)) == 0) }