summaryrefslogtreecommitdiff
path: root/ext/socket/sockssocket.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/socket/sockssocket.c')
-rw-r--r--ext/socket/sockssocket.c24
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