ZeroMQ接口函數之 :zmq_msg_send – 從一個socket發送一個消息幀


ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_msg_send

zmq_msg_send(3)     ØMQ Manual - ØMQ/3.2.5

Name

zmq_msg_send – 從一個socket發送一個消息幀

Synopsis

int zmq_msg_send (zmq_msg_t *msg, void *socket, int flags);

Description

zmq_msg_send函數和zmq_sendmsg(3)函數是完全相同的,只是zmq_sendmsg(3)在以后的版本中會被棄用。zmq_msg_send()函數在操作性方面和其他消息函數更有一致性。

zmq_msg_send()函數將會使用socket指定的socket,以隊列方式(FIFO)將msg參數指定的消息添加到發送隊列里面。flags參數由下列標志組合(|)而成:

  ZMQ_DONTWAIT

    指明本次操作使用非阻塞方式執行。如果這個消息不能被添加到哦消息隊列里面,zmq_msg_send()函數會執行失敗,並設置errno的值為EAGAIN.。

  ZMQ_SNDMORE

    指明正在被發送的消息是個多幀消息,並且后面還有更多的消息會進行發送。參見下面關於多幀消息的章節,以獲取更詳細的信息。

在調用zmq_msg_send()函數的時候,消息結構zmq_msg_t是失效的。如果想把消息發送給多個socket,需要調用復制函先數復制這個消息(比如zmq_msg_copy()函數)。

注意:調用zmq_msg_send()成功並不意味着消息已經成功得發送到網絡上了,只能說明消息已經添加到消息隊列,ZMQ會確保消息的發送。

多幀消息(Multi-part messages 具體怎么翻譯我也不會。。。)

一個ZMQ消息是由1個或多個幀組成的。每個消息段都是一個對立的zmq_msg_t消息結構。ZMQ確保對消息進行原子交付:每個socket或者接收整個消息,或者一個消息幀也不接收。每個消息中的幀數是不受限制的,除非內存不夠用了。

除了發送最后一幀消息,應用進程每次發送消息時必須使用ZMQ_SNDMORE標志以發送多幀消息。

Return value

如果zmq_msg_send()函數執行成功則返回消息中數據的長度。否則返回 -1,並且設置errno的值為下列值。

Errors

  EAGAIN

    在使用非阻塞模式發送消息的時候此消息不可用。

  ENOTSUP

    zmq_msg_send()函數不支持此socket的類型。

  EFSM

    當socket處在不正確的狀態時,zmq_msg_send()操作無法執行。這中情況可能發生在一個socket在集中狀態間切換的時候,比如ZMQ_REP。請查看zmq_socket(3) 函數的消息模式章節獲得更多信息。

  ETERM

    和socket相聯系的ZMQ context被終結了。

  ENOTSOCK

    參數提供的socket不可用。

  EINTR

    在消息發送之前,操作被系統信號中斷了。

  EFAULT

    參數提供的消息不可用。

Example

  向一個消息對象寫入內容並發送

/* Create a new message, allocating 6 bytes for message content */ zmq_msg_t msg; int rc = zmq_msg_init_size (&msg, 6); assert (rc == 0); /* Fill in message content with 'AAAAAA' */ memset (zmq_msg_data (&msg), 'A', 6); /* Send the message to the socket */ rc = zmq_msg_send (&msg, socket, 0); assert (rc == 6);

  發送一個多幀消息

/* Send a multi-part message consisting of three parts to socket */ rc = zmq_msg_send (&part1, socket, ZMQ_SNDMORE); rc = zmq_msg_send (&part2, socket, ZMQ_SNDMORE); /* Final part; no more parts to follow */ rc = zmq_msg_send (&part3, socket, 0);

See also

zmq_recv(3) zmq_send(3) zmq_msg_recv(3) zmq_socket(7) zmq(7)

Authors

This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>, and Pieter Hintjens <ph@imatix.com>.

Web site design and content is copyright (c) 2007-2012 iMatix Corporation. Contact us for professional support. Site content licensed under the Creative Commons Attribution-Share Alike 3.0 License. ØMQ is copyright (c) Copyright (c) 2007-2012 iMatix Corporation and Contributors. ØMQ is free software licensed under the LGPL. ØMQ, ZeroMQ, and 0MQ are trademarks of iMatix Corporation. Terms of Use — Privacy

Policy

 

更多 ZeroMQ API :http://www.cnblogs.com/fengbohello/p/4230135.html

 

翻譯:風波

mail : fengbohello@qq.com

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM