ZeroMQ介面函式之 :zmq_send – 在一個socket上傳送一個訊息幀
zmq_send(3) ØMQ Manual - ØMQ/4.1.0
Name
zmq_send – 在一個socket上傳送一個訊息幀
Synopsis
int zmq_send (void *socket, void *buf, size_t len, int flags);
Description
zmq_send()函式會根據buf引數指定的記憶體緩衝區和len引數指定的緩衝區資料長度建立一個訊息,並將訊息新增到訊息佇列中。flags引數是由下面的標誌組合成的。
ZMQ_DONTWAIT
對於當socket不可使用就要執行阻塞方式的socket型別來說(DEALER,PUSH),此選項可以指定這個操作以非阻塞模式執行。如果無法新增訊息到socket的訊息佇列上,zmq_send()函式將會執行失敗並設定errno為EAGAIN。
ZMQ_SNDMORE
指出當前正在傳送的訊息是個多幀訊息,並且接下來還會發送更多的訊息。請參考下面關於多幀訊息的段落,獲取更多的細節。
成功的呼叫zmq_send()函式並不能說明訊息已經被成功的傳送到了網路上,只能說明訊息被新增到了這個socket的訊息佇列上,並且ZMQ開始對其負責。
Multi-part messages
一個ZMQ訊息由1個或多個ZMQ訊息幀組成。ZMQ保證自動交付訊息:一個ZMQ的訊息要麼所有的訊息幀都被接收,要麼一個都不會接收。一個訊息中訊息幀的總數沒有限制,除非記憶體不夠用。
當一個應用程式在傳送多針訊息的時候,出了最後一幀訊息,其它的所有訊息必須使用ZMQ_SNDMORE進行註明。
Return value
當zmq_send()函式執行成功時會返回傳送的訊息的位元組數。否則返回 -1,並且設定errno的值為下列定義的值。
Errors
EAGAIN
函式正在使用非阻塞模式傳送訊息,並且socket當前不可用。
ENOTSUP
這個scoket的型別不支援zmq_send()函式的操作。
EFSM
zmq_send()函式當前無法對這個socket進行操作,因為這個socket處在與此操作不適當的狀態。這個錯誤可能出現在那些在幾種狀態之間進行切換的socket上,比如ZMQ_REP。請參照zmq_socket(3)函式部分的訊息模式部分以獲取更多資訊。
ETERM
與給定的socket向關聯的context被終結了。
ENOTSOCK
引數提供的socket不可用。
EINTR
此次操作被系統訊號中斷了。
EHOSTUNREACH
此訊息不能被路由。
Example
傳送一個多幀訊息
/* Send a multi-part message consisting of three parts to socket */
rc = zmq_send (socket, "ABC", 3, ZMQ_SNDMORE);
assert (rc == 3);
rc = zmq_send (socket, "DEFGH", 5, ZMQ_SNDMORE);
assert (rc == 5);
/* Final part; no more parts to follow */
rc = zmq_send (socket, "JK", 2, 0); assert (rc == 2);
See also
zmq_send_const(3) zmq_recv(3) zmq_socket(7) zmq(7)
Authors
This page was written by the ØMQ community. To make a change please read the ØMQ Contribution Policy at http://www.zeromq.org/docs:contributing.
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
翻譯:風波
mail : [email protected]