Class: LWES::Listener
- Inherits:
-
Object
- Object
- LWES::Listener
- Defined in:
- lib/lwes/listener.rb,
ext/lwes_ext/listener.c
Overview
This class is only supported on Ruby 1.9
listener = LWES::Listener.new :address => "224.1.1.11", :port => 12345
listener.each do |event|
p event
end
Instance Method Summary collapse
-
#close ⇒ Object
listener.close => nil.
-
#dup ⇒ Object
(also: #clone)
we disallow dup-ing objects since GC could double-free otherwise.
-
#each ⇒ Object
processes each LWES::Event object as it is received, yielding the LWES::Event to a given block.
-
#recv(*args) ⇒ Object
listener.recv => LWES::Event listener.recv(timeout_ms) => LWES::Event or nil.
Instance Method Details
#close ⇒ Object
listener.close => nil
Closes the socket used by the LWES::Listener object. Raises IOError if already closed.
35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'ext/lwes_ext/listener.c', line 35
static VALUE listener_close(VALUE self)
{
struct lwes_listener *listener = listener_ptr(self);
int err;
DATA_PTR(self) = NULL;
errno = 0;
err = lwes_listener_destroy(listener);
if (err)
fail(err, "lwes_listener_destroy()");
return Qnil;
}
|
#dup ⇒ Object Also known as: clone
we disallow dup-ing objects since GC could double-free otherwise
12 13 14 |
# File 'lib/lwes/listener.rb', line 12 def dup self end |
#each ⇒ Object
processes each LWES::Event object as it is received, yielding the LWES::Event to a given block
20 21 22 23 24 25 26 |
# File 'lib/lwes/listener.rb', line 20 def each begin yield recv rescue Errno::EINTR end while true self end |
#recv(*args) ⇒ Object
listener.recv => LWES::Event listener.recv(timeout_ms) => LWES::Event or nil
Receives and returns one LWES::Event from the network. An optional timeout (in milliseconds) may be specified and cause this to return nil
on timeout. This method is only available under Ruby 1.9.
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'ext/lwes_ext/listener.c', line 129
static VALUE listener_recv(int argc, VALUE *argv, VALUE self)
{
struct recv_args args;
VALUE timeout;
int r, saved_errno;
rb_scan_args(argc, argv, "01", &timeout);
args.listener = listener_ptr(self);
args.event = lwes_event_create_no_name(NULL);
args.timeout_ms = NIL_P(timeout) ? UINT_MAX : NUM2UINT(timeout);
saved_errno = errno = 0;
r = (int)rb_thread_blocking_region(recv_event, &args, RUBY_UBF_IO, 0);
if (r >= 0)
return lwesrb_wrap_event(cLWES_Event, args.event);
saved_errno = errno;
(void)lwes_event_destroy(args.event);
if (r == -2 && ! NIL_P(timeout))
return Qnil;
errno = saved_errno;
fail(r, "lwes_listener_recv(_by)");
return Qnil;
}
|