diff options
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | eval.c | 2 | ||||
-rw-r--r-- | ext/socket/socket.c | 85 |
3 files changed, 97 insertions, 1 deletions
@@ -8,6 +8,12 @@ Tue Mar 8 13:54:40 2005 NAKAMURA Usaku <usa@ruby-lang.org> * ext/socket/socket.c: workaround for some of 4.4BSD-Lite derived OSs. +Tue Mar 8 12:36:17 2005 Yukihiro Matsumoto <matz@ruby-lang.org> + + * ext/socket/socket.c: document from Sam Roberts + <sroberts@uniserve.com> for getsockopt and setsockopt is merged. + [ruby-doc:824] + Tue Mar 8 01:27:00 2005 NARUSE, Yui <naruse@ruby-lang.org> * ext/nkf/nkf-utf8/nkf.c: follow nkf 1.66 @@ -22,6 +28,11 @@ Mon Mar 7 21:35:02 2005 GOTOU Yuuzou <gotoyuzo@notwork.org> * sample/webrick/httpsd.rb: fix typo in comment. suggested by Kazuhiko Shiozaki. +Mon Mar 7 14:55:43 2005 Yukihiro Matsumoto <matz@ruby-lang.org> + + * eval.c (block_pass): should not push unique number if a block is + not an orphan. [ruby-dev:25808] + Wed Feb 16 02:55:21 2005 GOTOU Yuuzou <gotoyuzo@notwork.org> * ext/openssl/ossl_ssl.c (ossl_start_ssl, ossl_ssl_read, @@ -8484,7 +8484,7 @@ block_pass(self, node) old_block = ruby_block; _block = *data; _block.outer = ruby_block; - _block.uniq = block_unique++; + if (orphan) _block.uniq = block_unique++; ruby_block = &_block; PUSH_ITER(ITER_PRE); if (ruby_frame->iter == ITER_NOT) diff --git a/ext/socket/socket.c b/ext/socket/socket.c index a07ba4c266..ae02129cc0 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -273,6 +273,51 @@ bsock_close_write(sock) return Qnil; } +/* + * Document-method: setsockopt + * call-seq: setsockopt(level, optname, optval) + * + * Sets a socket option. These are protocol and system specific, see your + * local sytem documentation for details. + * + * === Parameters + * * +level+ is an integer, usually one of the SOL_ constants such as + * Socket::SOL_SOCKET, or a protocol level. + * * +optname+ is an integer, usually one of the SO_ constants, such + * as Socket::SO_REUSEADDR. + * * +optval+ is the value of the option, it is passed to the underlying + * setsockopt() as a pointer to a certain number of bytes. How this is + * done depends on the type: + * - Fixnum: value is assigned to an int, and a pointer to the int is + * passed, with length of sizeof(int). + * - true or false: 1 or 0 (respectively) is assigned to an int, and the + * int is passed as for a Fixnum. Note that +false+ must be passed, + * not +nil+. + * - String: the string's data and length is passed to the socket. + * + * === Examples + * + * Some socket options are integers with boolean values, in this case + * #setsockopt could be called like this: + * sock.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true) + * + * Some socket options are integers with numeric values, in this case + * #setsockopt could be called like this: + * sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_TTL, 255) + * + * Option values may be structs. Passing them can be complex as it involves + * examining your system headers to determine the correct definition. An + * example is an +ip_mreq+, which may be defined in your system headers as: + * struct ip_mreq { + * struct in_addr imr_multiaddr; + * struct in_addr imr_interface; + * }; + * + * In this case #setsockopt could be called like this: + * optval = IPAddr.new("224.0.0.251") + Socket::INADDR_ANY + * sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, optval) + * +*/ static VALUE bsock_setsockopt(sock, lev, optname, val) VALUE sock, lev, optname, val; @@ -313,6 +358,46 @@ bsock_setsockopt(sock, lev, optname, val) return INT2FIX(0); } +/* + * Document-method: getsockopt + * call-seq: getsockopt(level, optname) + * + * Gets a socket option. These are protocol and system specific, see your + * local sytem documentation for details. The option is returned as + * a String with the data being the binary value of the socket option. + * + * === Parameters + * * +level+ is an integer, usually one of the SOL_ constants such as + * Socket::SOL_SOCKET, or a protocol level. + * * +optname+ is an integer, usually one of the SO_ constants, such + * as Socket::SO_REUSEADDR. + * + * === Examples + * + * Some socket options are integers with boolean values, in this case + * #getsockopt could be called like this: + * optval = sock.getsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR) + * optval = optval.unpack "i" + * reuseaddr = optval[0] == 0 ? false : true + * + * Some socket options are integers with numeric values, in this case + * #getsockopt could be called like this: + * optval = sock.getsockopt(Socket::IPPROTO_IP, Socket::IP_TTL) + * ipttl = optval.unpack("i")[0] + * + * Option values may be structs. Decoding them can be complex as it involves + * examining your system headers to determine the correct definition. An + * example is a +struct linger+, which may be defined in your system headers + * as: + * struct linger { + * int l_onoff; + * int l_linger; + * }; + * + * In this case #getsockopt could be called like this: + * optval = sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER) + * onoff, linger = optval.unpack "ii" +*/ static VALUE bsock_getsockopt(sock, lev, optname) VALUE sock, lev, optname; |