1. 程式人生 > >ZeroMQ介面函式之 :zmq_recv – 從一個socket上接收一個訊息幀

ZeroMQ介面函式之 :zmq_recv – 從一個socket上接收一個訊息幀

zmq_recv(3)        ØMQ Manual - ØMQ/4.1.0

Name

zmq_recv – 從一個socket上接收一個訊息幀

Synopsis

int zmq_recv (void *socket, void *buf, size_t len, int flags);

Description

zmq_recv()函式會從socket引數指定的socket上接收一個訊息,並把這個訊息儲存在buf引數指定的記憶體空間中。超過len引數指定長度的任何資料都會被刪去。如果在socket上沒有訊息可接收,zmq_recv()函式會進行阻塞,直到請求被滿足為止。flag引數是由下面的選項組合而成的標誌。

  ZMQ_DONTWAIT

    指明此函式在非阻塞模式下執行。如果在指定的socket中沒有訊息,zmq_recv()函式會執行失敗,並返回值為EAGAIN的errno。

Multi-part messages

一個ZMQ訊息由1個或多個ZMQ訊息幀組成。ZMQ保證自動交付訊息:一個ZMQ的訊息要麼所有的訊息幀都被接收,要麼一個都不會接收。一個訊息中訊息幀的總數沒有限制,除非記憶體不夠用。

一個應用程序想要接收多幀的ZMQ訊息,必須在zmq_recv()函式執行完成後使用zmq_getsockopt(3)函式的ZMQ_RCVMORE標誌選項進行檢查,以確認是否還有更多的訊息幀等待接收。

Return value

如果zmq_recv()函式執行成功,將會返回接收到的訊息的位元組數。注意這個值可能會超過len引數指定的值,以免訊息被截斷。如果執行失敗,這個函式將會返回 -1,並且設定errno的值為下列指定的值。

Errors

  EAGAIN

    使用非阻塞方式接收訊息的時候沒有接收到任何訊息。

  ENOTSUP

    socket引數指定的socket型別無法使用zmq_recv()進行操作。

  EFSM

    zmq_recv()函式當前無法對這個socket進行操作,因為這個socket處在與此操作不適當的狀態。這個錯誤可能出現在那些在幾種狀態之間進行切換的socket上,比如ZMQ_REP。請參照zmq_socket(3)函式部分的訊息模式部分以獲取更多資訊。

  ETERM

    與制定的socket相關聯的context被終結了。

  ENOTSOCK

    制定的socket不可用。

  EINTR

    在接接收到訊息之前,這個操作被系統訊號中斷了。

Example

  從一個socket中接收訊息

char buf [256];
nbytes = zmq_recv (socket, buf, 256, 0); assert (nbytes != -1);

See also

zmq_send(3)  zmq_getsockopt(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]