Skip to content
This repository has been archived by the owner on Jan 9, 2018. It is now read-only.

Commit

Permalink
fix loading of XREQ/XREP sockets; repair msg delivery logic
Browse files Browse the repository at this point in the history
  • Loading branch information
Chuck Remes committed Aug 16, 2010
1 parent e90bcfe commit 64bbd89
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 4 deletions.
2 changes: 1 addition & 1 deletion lib/zm/sockets.rb
@@ -1,4 +1,4 @@

%w( base req rep pair pub sub ).each do |rb_file|
%w( base req rep pair pub sub xreq xrep ).each do |rb_file|
require File.join(File.dirname(__FILE__), 'sockets', rb_file)
end
11 changes: 8 additions & 3 deletions lib/zm/sockets/base.rb
Expand Up @@ -113,8 +113,8 @@ def send_message message, multipart = false
#
# May raise a ZMQ::SocketError.
#
def send_message_string message
queued = @raw_socket.send_string message, ZMQ::NOBLOCK
def send_message_string message, multipart = false
queued = @raw_socket.send_string message, ZMQ::NOBLOCK | (multipart ? ZMQ::SNDMORE : 0)
queued
end

Expand Down Expand Up @@ -159,15 +159,19 @@ def identity=(value) @raw_socket.identity = value; end
def resume_read
messages = []
rc = read_message_part messages
#puts "resume_read: rc1 [#{rc}], more_parts? [#{@raw_socket.more_parts?}]"

while 0 == rc && @raw_socket.more_parts?
#puts "get next part"
rc = read_message_part messages
#puts "resume_read: rc2 [#{rc}]"
end
#puts "no more parts, ready to deliver"

# only deliver the messages when rc is 0; otherwise, we
# may have gotten EAGAIN and no message was read;
# don't deliver empty messages
deliver messages, rc unless 0 == rc
deliver messages, rc if 0 == rc
end

# Used by the reactor. Never called by user code.
Expand Down Expand Up @@ -201,6 +205,7 @@ def read_message_part messages
end

def deliver messages, rc
#puts "deliver: rc [#{rc}], messages #{messages.inspect}"
if 0 == rc
@state = :ready
@handler.on_readable self, messages
Expand Down

0 comments on commit 64bbd89

Please sign in to comment.