1. 程式人生 > >ZeroMQ介面函式之 :zmq_send_const – 從一個socket上傳送一個固定記憶體資料

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]