ZeroMQ介面函式之 :zmq_send_const – 從一個socket上傳送一個固定記憶體資料
—————————————————————————————————————
zmq_send_const(3) ØMQ Manual - ØMQ/4.1.0
Name
zmq_send_const – 從一個socket上傳送一個固定記憶體資料
Synopsis
int zmq_send_const (void *socket, void *buf, size_t len, int flags);
Description
zmq_send_const()函式會將通過buf引數和len引數建立的訊息新增到socket的訊息佇列中。訊息記憶體被認為是一個固定的空間,並且不會以任何方式被複制或者被釋放。flags引數是下面定義的標誌的組合:
ZMQ_DONTWAIT
當一些socket型別(DEALER、PUSH)由於對端不可用(或者所有的對端都到達高水位線),此選項指定本次的操作以非阻塞方式執行。如果無法新增到socket的訊息佇列中,zmq_send_const()函式會執行錯誤,並設定errno的值為EAGAIN。
ZMQ_SNDMORE
指明當前傳送的訊息是個多幀訊息,並且還會有次訊息的更多幀要傳送。參見下面對多訊息的描述章節,以獲取更多資訊。
成功的呼叫zmq_send_const()函式並不能說明訊息已經被髮送到網路上,而是訊息已經被新增到了訊息佇列上,並且ZMQ將對這個訊息負責。
Multi-part messages
一個ZMQ訊息由一個或多個訊息幀組成。ZMQ保證自動交付這個訊息:一端會完全接收這個訊息,或者完全不接收這個訊息。訊息的幀的總數沒有限制,只要記憶體夠用就行。
應用程序在傳送多幀訊息的時候,出了傳送最後一幀的時候,必須要使用ZMQ_SNDMORE標誌。
Return value
如果函式zmq_send_const()執行成功,則返回訊息的位元組數。否則,函式返回 -1,並且設定errno的值為下列定義的值。
Errors
EAGAIN
非阻塞模式傳送時,訊息在此刻無法被髮送。
ENOTSUP
zmq_send_const()函式不支援此socket的型別。
EFSM
zmq_send_const()操作此刻無法在這個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_const (socket, "ABC", 3, ZMQ_SNDMORE);
assert (rc == 3);
rc = zmq_send_const (socket, "DEFGH", 5, ZMQ_SNDMORE);
assert (rc == 5);
/* Final part; no more parts to follow */
rc = zmq_send_const (socket, "JK", 2, 0);
assert (rc == 2);
See also
zmq_send(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]