ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_recv
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
更多 ZeroMQ API :http://www.cnblogs.com/fengbohello/p/4230135.html
翻譯:風波
mail : fengbohello@qq.com