diff --git a/io.c b/io.c
index 2a5a645..91178a6 100644
--- a/io.c
+++ b/io.c
@@ -7339,11 +7339,51 @@ select_end(VALUE arg)
* IO.select(read_array
* [, write_array
* [, error_array
- * [, timeout]]] )-> array or nil
+ * [, timeout]]]) -> array or nil
*
- * See Kernel#select
.
+ * Calls select(2) system call.
+ * It monitors given arrays of IO
objects, waits one or more
+ * of IO
objects ready for reading, are ready for writing,
+ * and have pending exceptions respectably, and returns an array that
+ * contains arrays of those IO objects. It will return nil
+ * if optional timeout value is given and no IO
object
+ * is ready in timeout seconds.
+ *
+ * === Parameters
+ * read_array:: an array of IO
objects that wait until ready for read
+ * write_array:: an array of IO
objects that wait until ready for write
+ * error_array:: an array of IO
objects that wait for exceptions
+ * timeout:: a numeric value in second
+ *
+ * === Example
+ *
+ * rp, wp = IO.pipe
+ * mesg = "ping "
+ * 100.times {
+ * rs, ws, = IO.select([rp], [wp])
+ * if r = rs[0]
+ * ret = r.read(5)
+ * print ret
+ * case ret
+ * when /ping/
+ * mesg = "pong\n"
+ * when /pong/
+ * mesg = "ping "
+ * end
+ * end
+ * if w = ws[0]
+ * w.write(mesg)
+ * end
+ * }
+ *
+ * produces:
+ *
+ * ping pong
+ * ping pong
+ * ping pong
+ * (snipped)
+ * ping
*/
-
static VALUE
rb_f_select(int argc, VALUE *argv, VALUE obj)
{