This would be the altered code if I'm understanding your concern.

```ruby
frames = []
zmq_error_check(@frontend_socket.recv_strings frames)
```

Well, or
```ruby
frames = []
rc = @frontend_socket.recv_strings frames
zmq_error_check(rc)
```

ZMQ writes the results into the passed array so it can return a result code. I would love to start a branch of ffi-rzmq that just returns the array and throws an error when needed, but for now it's magical.