diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-02-13 05:09:11 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-02-13 05:09:11 +0000 |
commit | 73e5f4bc9c528f24bd1230f82a7d12b8e2f8a11d (patch) | |
tree | 8946eb2e9437f998c332d5d7326032efce9dd141 /ext/socket | |
parent | 0b320355a82b8a681ffe33bc4fe4ee21291e1726 (diff) | |
download | ruby-73e5f4bc9c528f24bd1230f82a7d12b8e2f8a11d.tar.gz ruby-73e5f4bc9c528f24bd1230f82a7d12b8e2f8a11d.tar.xz ruby-73e5f4bc9c528f24bd1230f82a7d12b8e2f8a11d.zip |
* io.c (rb_io_ctl): do not call ioctl/fcntl for f2, if f and f2
have same fileno.
* eval.c (rb_load): raise LocaJumpError if unexpected local jumps
appear during load.
* ext/socket/socket.c (bsock_close_read): don't call rb_thread_fd_close();
it's supposed to be called by io_io_close().
* ext/socket/socket.c (bsock_close_read): do not modify f and f2.
* ext/socket/socket.c (bsock_close_write): ditto.
* ext/socket/socket.c (sock_new): avoid dup(2) on sockets.
* parse.y (primary): preserve and clear in_single and in_def using
stack to prevent nested method errors in singleton class bodies.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@1177 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket')
-rw-r--r-- | ext/socket/extconf.rb | 4 | ||||
-rw-r--r-- | ext/socket/socket.c | 20 |
2 files changed, 4 insertions, 20 deletions
diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb index 3582c21c4..7dadd7007 100644 --- a/ext/socket/extconf.rb +++ b/ext/socket/extconf.rb @@ -338,9 +338,9 @@ if have_func(test_func) end if ENV["SOCKS_SERVER"] or enable_config("socks", false) if have_library("socks5", "SOCKSinit") - $CFLAGS="-DSOCKS5 -DSOCKS" + $CFLAGS+=" -DSOCKS5 -DSOCKS" elsif have_library("socks", "Rconnect") - $CFLAGS="-DSOCKS" + $CFLAGS+=" -DSOCKS" end end create_makefile("socket") diff --git a/ext/socket/socket.c b/ext/socket/socket.c index 1ef2e894f..891a35492 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -182,9 +182,7 @@ sock_new(class, fd) fp->f = rb_fdopen(fd, "r"); #ifdef NT fp->finalize = sock_finalize; - fd = myfddup(fd); #else - fd = dup(fd); #endif fp->f2 = rb_fdopen(fd, "w"); fp->mode = FMODE_READWRITE; @@ -233,18 +231,10 @@ bsock_close_read(sock) } GetOpenFile(sock, fptr); shutdown(fileno(fptr->f), 0); - if (fptr->f2 == 0) { + if (!(fptr->mode & FMODE_WRITABLE)) { return rb_io_close(sock); } - rb_thread_fd_close(fileno(fptr->f)); fptr->mode &= ~FMODE_READABLE; -#ifdef NT - myfdclose(fptr->f); -#else - fclose(fptr->f); -#endif - fptr->f = fptr->f2; - fptr->f2 = 0; return Qnil; } @@ -259,17 +249,11 @@ bsock_close_write(sock) rb_raise(rb_eSecurityError, "Insecure: can't close socket"); } GetOpenFile(sock, fptr); - if (fptr->f2 == 0) { + if (!(fptr->mode & FMODE_READABLE)) { return rb_io_close(sock); } shutdown(fileno(fptr->f2), 1); fptr->mode &= ~FMODE_WRITABLE; -#ifdef NT - myfdclose(fptr->f2); -#else - fclose(fptr->f2); -#endif - fptr->f2 = 0; return Qnil; } |