zmq에 C# 바인딩을 사용하고 있으며 소켓 연결 여부에 따라 sndmore와 noblock에 다른 동작이 발생합니다. 엔드 포인트에 연결된 클라이언트가없는 경우ZMQ SNDMORE와 NOBLOCK은 소켓 연결 여부에 따라 다르게 동작합니다.
, 최초의 송신에 다음과 같은 시나리오 블록 :
Context zmqContext = new Context(1);
Socket zmqSocket = zmqContext.Socket(<any socket type>);
zmqSocket.Bind("tcp://*:5555");
zmqSocket.Send("hello", Encoding.UTF8, SendRecvOpt.SNDMORE);
zmqSocket.Send("world", Encoding.UTF8, SendRecvOpt.SNDMORE);
zmqSocket.Send("ok, I'm done!", Encoding.UTF8, SendRecvOpt.NOBLOCK);
이 하나가 모든 엔드 포인트에 아무것도 존재하지 않는 경우는 차단하지 않지만 :
Context zmqContext = new Context(1);
Socket zmqSocket = zmqContext.Socket(<any socket type>);
zmqSocket.Connect("tcp://localhost:5555");
zmqSocket.Send("hello", Encoding.UTF8, SendRecvOpt.SNDMORE);
zmqSocket.Send("world", Encoding.UTF8, SendRecvOpt.SNDMORE);
zmqSocket.Send("ok, I'm done!", Encoding.UTF8, SendRecvOpt.NOBLOCK);
가
한 시나리오에서는 모든 샌드에 noblock 플래그를 사용해야하지만 다른 시나리오에서는 마지막 샌드에서만 noblock 플래그를 사용해야한다는 것이 이상하게 보입니다. 이 문제와 관련하여 zmq 설명서에서 아무 것도 찾을 수 없습니다. 이것은 zmq에 대한 의도적 인 동작인지 아니면 C# 바인딩의 특이성인지 누군가가 말해 줄 수 있습니까? 이 문서에 내가 놓친 문서가 있습니까?
이 문제를 게시 한 이후로 몇 번 업그레이드되었습니다. 문제를 열어보기 전에 문제가 있는지 확인하겠습니다. :) – Franchesca