diff options
Diffstat (limited to 'ext/socket/sockssocket.c')
| -rw-r--r-- | ext/socket/sockssocket.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/ext/socket/sockssocket.c b/ext/socket/sockssocket.c index 48be4fcf99..30860ea257 100644 --- a/ext/socket/sockssocket.c +++ b/ext/socket/sockssocket.c @@ -13,22 +13,29 @@ #ifdef SOCKS /* * call-seq: - * SOCKSSocket.new(host, serv) => socket + * SOCKSSocket.new(host, port) => socket * - * Opens a SOCKS connection to +host+ via the SOCKS server +serv+. + * Opens a SOCKS connection to +host+ via the SOCKS server. + * + * The SOCKS server configuration varies by implementation + * + * When using the Dante libsocks/libsocksd implementation it is configured as SOCKS_SERVER env var. + * + * See: https://manpages.debian.org/testing/dante-client/socksify.1.en.html for full env variable support. * */ static VALUE -socks_init(VALUE sock, VALUE host, VALUE serv) +socks_init(VALUE sock, VALUE host, VALUE port) { static int init = 0; if (init == 0) { - SOCKSinit("ruby"); - init = 1; + char progname[] = "ruby"; + SOCKSinit(progname); + init = 1; } - return rsock_init_inetsock(sock, host, serv, Qnil, Qnil, INET_SOCKS); + return rsock_init_inetsock(sock, host, port, Qnil, Qnil, INET_SOCKS, Qnil, Qnil, Qnil, Qfalse, Qnil); } #ifdef SOCKS5 @@ -41,11 +48,8 @@ socks_s_close(VALUE sock) { rb_io_t *fptr; - if (rb_safe_level() >= 4 && !OBJ_TAINTED(sock)) { - rb_raise(rb_eSecurityError, "Insecure: can't close socket"); - } GetOpenFile(sock, fptr); - shutdown(fptr->fd, 2); + shutdown(fptr->fd, SHUT_RDWR); return rb_io_close(sock); } #endif |
