/* * Block on a list of sockets * * # Block on a list: * * Irmo::Socket.block([sock1, sock2]) * * # Block with a 100ms timeout * * Irmo::Socket.block([sock1, sock2], 100) * */ static VALUE socket_block_set(int argc, VALUE *argv, VALUE self) { int timeout; IrmoSocket **sockets; struct RArray *socket_array; int i; // work out the timeout if (argc == 1) timeout = 0; else if (argc == 2) timeout = NUM2INT(argv[1]); else rb_raise(rb_eNameError, "invalid number of arguments"); // extract sockets socket_array = RARRAY(argv[0]); sockets = calloc(socket_array->len, sizeof(IrmoSocket *)); for (i=0; i<socket_array->len; ++i) sockets[i] = unwrap_socket(socket_array->ptr[i]); irmo_socket_block_set(sockets, socket_array->len, timeout); free(sockets); return Qnil; }