5
다음 코드를 실행하면 zmq_poll
으로 첫 번째 호출에서 오류가 발생합니다 (즉, -1
을 반환 함). zmq_errno()
은 128
을 반환하고 zmr_strerror(128)
호출은 "Unknown error"
을 반환합니다. 나는 ZMQ를 C++과 함께 아무런 문제없이 잠시 사용 해왔다. 아무리 간단한지라도 zmq_poll
을 호출 할 수는 없다.ZMQ 폴링이 작동하지 않습니다.
zmq::version
을 호출하면 ZMQ 버전 2.1.10이 사용 중임을 알 수 있습니다.
zmq_poll
이 실패한 이유는 누구입니까?
#include <zmq/zmq.hpp>
int main(int argc, char* argv[])
{
zmq::context_t context(1);
zmq::socket_t repA(context, ZMQ_REP);
zmq::socket_t repB(context, ZMQ_REP);
repA.bind("tcp://127.0.0.1:5555");
repB.bind("tcp://127.0.0.1:5556");
zmq::pollitem_t items[] =
{
{ &repA, 0, ZMQ_POLLIN, 0 },
{ &repB, 0, ZMQ_POLLIN, 0 }
};
while (true)
{
int rc = zmq_poll(items, 2, 1000);
if (rc < 0)
{
int code = zmq_errno(); //code = 128
auto message = zmq_strerror(code); //message = "Unknown error"
}
}
}
errno의 값은 무엇입니까? _Upon 실패, zmq_poll()은 -1을 반환하고 아래 정의 된 값들 중 하나에 errno를 설정합니다. _ http://api.zeromq.org/2-1:zmq-poll – flup
@flup 이제'zmq_poll' doesn (실제로는'-1'로 신호를 보낸다.) 그리고 실제 에러 번호를 얻기 위해서는'zmq_errno()'를 호출해야한다. 이 작업을 수행하면 오류 번호가 128이됩니다. (업데이트 된 질문) –
_ zmq_pollitem_t 구조에서 사용할 ØMQ 소켓을 얻으려면 socket_t 클래스의 인스턴스를 (void *) _로 캐스팅해야합니다. 그래서 나는 그 주소를 보내는 대신에'repA'를 사용해야한다고 생각합니다. – flup