Download Firefox: WindowsMac OS X
logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

[doc patch] socket.c - #getsockopt + #setsockopt: msg#00002

Subject: [doc patch] socket.c - #getsockopt + #setsockopt
I posted earlier setsockopt docs. There was a one char typo causing
unsightly html formatting. This is fixed.

Also, now there is getsockopt documentation.


Index: socket.c
===================================================================
RCS file: /src/ruby/ext/socket/socket.c,v
retrieving revision 1.108.2.24
diff -u -r1.108.2.24 socket.c
--- socket.c    28 Feb 2005 02:45:15 -0000      1.108.2.24
+++ socket.c    8 Mar 2005 02:59:09 -0000
@@ -272,6 +272,51 @@
     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;
@@ -312,6 +357,46 @@
     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;




<Prev in Thread] Current Thread [Next in Thread>