2012-08-02 1 views
1

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# 바인딩의 특이성인지 누군가가 말해 줄 수 있습니까? 이 문서에 내가 놓친 문서가 있습니까?

답변

1

버그처럼 들립니다. 확실히 문서화 된 행동은 아닙니다. 테스트 케이스를 zeromq-dev리스트에 보낼 수 있습니까? 우리는 C# 바인딩을 제외 할 수 있도록 C에서 하나를 만드는 것이 가장 좋습니다.

+0

이 문제를 게시 한 이후로 몇 번 업그레이드되었습니다. 문제를 열어보기 전에 문제가 있는지 확인하겠습니다. :) – Franchesca

관련 문제