[#2320] Problems in mathn, rational, complex, matrix — Gavin Sinclair <gsinclair@...>
I received a message from Richard Graham mentioning a problem in the
[#2346] Patch for socket.c: control reverse lookup for every instance — Thomas Uehlinger <uehli@...>
Hi all
[#2357] Use the BasicSocket#do_not_reverse_lookup flag in Webrick — Thomas Uehlinger <uehli@...>
Hi
[#2367] Standard libraries — Dave Thomas <dave@...>
From ruby-dev summary:
Hi,
Hi,
By the way, this issue is about a matter of taste, so the debate is somewhat
Hi,
On Thu, Feb 12, 2004 at 02:58:22PM +0900, NAKAMURA, Hiroshi wrote:
On Thursday, February 12, 2004, 8:18:32 PM, Mauricio wrote:
On Thursday 12 February 2004 04:37, Gavin Sinclair wrote:
On Friday, February 13, 2004, 12:44:15 AM, Sean wrote:
(Dave Thomas: there's a question for you in the second paragraph; if you're
[#2397] PATCH: deprecate cgi-lib, getopts, importenv, parsearg from standard library — Gavin Sinclair <gsinclair@...>
Index: cgi-lib.rb
* Gavin Sinclair (gsinclair@soyabean.com.au) wrote:
On Thursday, February 12, 2004, 11:39:37 PM, E wrote:
Hi,
Hi,
[#2422] Re: [ruby-cvs] ruby: * lib/ftools.rb: documented — "U.Nakamura" <usa@...>
Hello,
[#2449] make install not getting through rdoc phase — "David A. Black" <dblack@...>
Hi --
[#2465] PATCH: OpenStruct#initialize to yield self — Gavin Sinclair <gsinclair@...>
This is a common approach I use to object initialization; I don't know
On Fri, 20 Feb 2004 02:42:00 +0900, Dave Thomas wrote:
> > As more general suggestion. Could 'new' yield the new object is a block
On Fri, 20 Feb 2004 08:24:31 +0900, Carlos wrote:
Hi,
Yukihiro Matsumoto wrote:
On Feb 20, 2004, at 4:33 PM, Joel VanderWerf wrote:
[#2494] rehash segfault — Nathaniel Talbott <nathaniel@...>
I don't have a lot of information on this bug at this point, but
Hi,
On Wed, Feb 25, 2004 at 03:30:54AM +0900, Yukihiro Matsumoto wrote:
[#2504] foldl and foldr — "Sean E. Russell" <ser@...>
Sorry if I'm opening old wounds; I have a hard time believing that nobody has
Re: Patch for socket.c: control reverse lookup for every instance
Hi,
At Fri, 6 Feb 2004 07:03:12 +0900,
Thomas Uehlinger wrote in [ruby-core:02346]:
> While experimenting with Webrick I felt that it would be nice
> if I could control for every socket whether reverse lookup
> should be done or not (instead of using the global
> BasicSocket.do_not_reverse_lookup flag).
Your patch makes impossible to control it in singleton method
BasicSocket.getaddrinfo.
Index: ext/socket/socket.c
===================================================================
RCS file: /cvs/ruby/src/ruby/ext/socket/socket.c,v
retrieving revision 1.112
diff -u -2 -p -d -r1.112 socket.c
--- ext/socket/socket.c 27 Jan 2004 02:04:47 -0000 1.112
+++ ext/socket/socket.c 5 Feb 2004 23:39:11 -0000
@@ -66,4 +66,5 @@
static int do_not_reverse_lookup = 0;
+#define FMODE_NOREVLOOKUP 0x100
VALUE rb_cBasicSocket;
@@ -179,4 +180,7 @@ init_sock(sock, fd)
fp->f2 = rb_fdopen(fd, "w");
fp->mode = FMODE_READWRITE;
+ if (do_not_reverse_lookup) {
+ fp->mode |= FMODE_NOREVLOOKUP;
+ }
rb_io_synchronized(fp);
@@ -393,5 +397,33 @@ bsock_send(argc, argv, sock)
}
-static VALUE ipaddr _((struct sockaddr*));
+static VALUE
+bsock_do_not_reverse_lookup(sock)
+ VALUE sock;
+{
+ OpenFile *fptr;
+
+ GetOpenFile(sock, fptr);
+ return (fptr->mode & FMODE_NOREVLOOKUP) ? Qtrue : Qfalse;
+}
+
+static VALUE
+bsock_do_not_reverse_lookup_set(sock, state)
+ VALUE sock;
+ VALUE state;
+{
+ OpenFile *fptr;
+
+ rb_secure(4);
+ GetOpenFile(sock, fptr);
+ if (RTEST(state)) {
+ fptr->mode |= FMODE_NOREVLOOKUP;
+ }
+ else {
+ fptr->mode &= ~FMODE_NOREVLOOKUP;
+ }
+ return sock;
+}
+
+static VALUE ipaddr _((struct sockaddr*, int));
#ifdef HAVE_SYS_UN_H
static VALUE unixaddr _((struct sockaddr_un*));
@@ -461,5 +493,5 @@ s_recvfrom(sock, argc, argv, from)
}
#endif
- return rb_assoc_new(str, ipaddr((struct sockaddr*)buf));
+ return rb_assoc_new(str, ipaddr((struct sockaddr*)buf, fptr->mode & FMODE_NOREVLOOKUP));
#ifdef HAVE_SYS_UN_H
case RECV_UNIX:
@@ -656,6 +688,7 @@ sock_addrinfo(host, port, socktype, flag
static VALUE
-ipaddr(sockaddr)
+ipaddr(sockaddr, norevlookup)
struct sockaddr *sockaddr;
+ int norevlookup;
{
VALUE family, port, addr1, addr2;
@@ -690,5 +723,6 @@ ipaddr(sockaddr)
break;
}
- if (!do_not_reverse_lookup) {
+
+ if (!norevlookup) {
error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf),
NULL, 0, 0);
@@ -704,5 +738,5 @@ ipaddr(sockaddr)
}
addr2 = rb_str_new2(hbuf);
- if (do_not_reverse_lookup) {
+ if (norevlookup) {
addr1 = addr2;
}
@@ -1255,5 +1289,5 @@ ip_addr(sock)
if (getsockname(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0)
rb_sys_fail("getsockname(2)");
- return ipaddr((struct sockaddr*)&addr);
+ return ipaddr((struct sockaddr*)&addr, fptr->mode & FMODE_NOREVLOOKUP);
}
@@ -1270,5 +1304,5 @@ ip_peeraddr(sock)
if (getpeername(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0)
rb_sys_fail("getpeername(2)");
- return ipaddr((struct sockaddr*)&addr);
+ return ipaddr((struct sockaddr*)&addr, fptr->mode & FMODE_NOREVLOOKUP);
}
@@ -1986,5 +2020,5 @@ make_addrinfo(res0)
base = rb_ary_new();
for (res = res0; res; res = res->ai_next) {
- ary = ipaddr(res->ai_addr);
+ ary = ipaddr(res->ai_addr, do_not_reverse_lookup);
if (res->ai_canonname) {
RARRAY(ary)->ptr[2] = rb_str_new2(res->ai_canonname);
@@ -2401,4 +2435,6 @@ Init_socket()
rb_define_method(rb_cBasicSocket, "send", bsock_send, -1);
rb_define_method(rb_cBasicSocket, "recv", bsock_recv, -1);
+ rb_define_method(rb_cBasicSocket, "do_not_reverse_lookup", bsock_do_not_reverse_lookup, 0);
+ rb_define_method(rb_cBasicSocket, "do_not_reverse_lookup=", bsock_do_not_reverse_lookup_set, 1);
rb_cIPSocket = rb_define_class("IPSocket", rb_cBasicSocket);
--
Nobu Nakada