summaryrefslogtreecommitdiff
path: root/ext/socket
diff options
context:
space:
mode:
Diffstat (limited to 'ext/socket')
-rw-r--r--ext/socket/getaddrinfo.c4
-rw-r--r--ext/socket/getnameinfo.c4
-rw-r--r--ext/socket/socket.c17
3 files changed, 25 insertions, 0 deletions
diff --git a/ext/socket/getaddrinfo.c b/ext/socket/getaddrinfo.c
index c71a56ca80c..501ebd5006e 100644
--- a/ext/socket/getaddrinfo.c
+++ b/ext/socket/getaddrinfo.c
@@ -67,6 +67,10 @@
#include <stddef.h>
#include <ctype.h>
+#ifdef SOCKS5
+#include <socks.h>
+#endif
+
#include "config.h"
#include "addrinfo.h"
#include "sockport.h"
diff --git a/ext/socket/getnameinfo.c b/ext/socket/getnameinfo.c
index abadd8f4423..cb65e4c0709 100644
--- a/ext/socket/getnameinfo.c
+++ b/ext/socket/getnameinfo.c
@@ -56,6 +56,10 @@
#include <string.h>
#include <stddef.h>
+#ifdef SOCKS5
+#include <socks.h>
+#endif
+
#include "config.h"
#include "addrinfo.h"
#include "sockport.h"
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index 3ff6af441e2..f7840948f89 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -780,6 +780,20 @@ socks_s_open(class, host, serv)
Check_SafeStr(host);
return open_inet(class, host, serv, INET_SOCKS);
}
+
+#ifdef SOCKS5
+static VALUE
+socks_s_close(sock)
+ VALUE sock;
+{
+ OpenFile *fptr;
+
+ GetOpenFile(sock, fptr);
+ shutdown(fileno(fptr->f), 2);
+ shutdown(fileno(fptr->f2), 2);
+ return rb_io_close(sock);
+}
+#endif
#endif
/*
@@ -1876,6 +1890,9 @@ Init_socket()
rb_define_global_const("SOCKSsocket", rb_cSOCKSSocket);
rb_define_singleton_method(rb_cSOCKSSocket, "open", socks_s_open, 2);
rb_define_singleton_method(rb_cSOCKSSocket, "new", socks_s_open, 2);
+#ifdef SOCKS5
+ rb_define_method(rb_cSOCKSSocket, "close", socks_s_close, 0);
+#endif
#endif
rb_cTCPServer = rb_define_class("TCPServer", rb_cTCPSocket);