class Protobuf::Rpc::Connectors::Zmq

def send_request_with_timeout(attempt = 0)

def send_request_with_timeout(attempt = 0)
  socket = create_socket
  socket.setsockopt(::ZMQ::RCVTIMEO, rcv_timeout)
  socket.setsockopt(::ZMQ::SNDTIMEO, snd_timeout)
  logger.debug { sign_message("Sending Request (attempt #{attempt}, #{socket})") }
  zmq_eagain_error_check(socket.send_string(@request_data), :socket_send_string)
  logger.debug { sign_message("Waiting #{rcv_timeout}ms for response (attempt #{attempt}, #{socket})") }
  zmq_eagain_error_check(socket.recv_string(@response_data = ""), :socket_recv_string)
  logger.debug { sign_message("Response received (attempt #{attempt}, #{socket})") }
rescue ZmqEagainError
  logger.debug { sign_message("Timed out waiting for response (attempt #{attempt}, #{socket})") }
  raise RequestTimeout
ensure
  logger.debug { sign_message("Closing Socket")  }
  zmq_error_check(socket.close, :socket_close) if socket
  logger.debug { sign_message("Socket closed")  }
end