/* 
 * 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;
}