summaryrefslogtreecommitdiff
path: root/ext/socket/tcpsocket.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/socket/tcpsocket.c')
-rw-r--r--ext/socket/tcpsocket.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/ext/socket/tcpsocket.c b/ext/socket/tcpsocket.c
index 1446e390e4..4bd6f87406 100644
--- a/ext/socket/tcpsocket.c
+++ b/ext/socket/tcpsocket.c
@@ -12,13 +12,14 @@
/*
* call-seq:
- * TCPSocket.new(remote_host, remote_port, local_host=nil, local_port=nil, resolv_timeout: nil)
+ * TCPSocket.new(remote_host, remote_port, local_host=nil, local_port=nil, resolv_timeout: nil, connect_timeout: nil)
*
* Opens a TCP connection to +remote_host+ on +remote_port+. If +local_host+
* and +local_port+ are specified, then those parameters are used on the local
* end to establish the connection.
*
* [:resolv_timeout] specify the name resolution timeout in seconds.
+ * [:connect_timeout] specify the timeout in seconds.
*/
static VALUE
tcp_init(int argc, VALUE *argv, VALUE sock)
@@ -26,27 +27,28 @@ tcp_init(int argc, VALUE *argv, VALUE sock)
VALUE remote_host, remote_serv;
VALUE local_host, local_serv;
VALUE opt;
- static ID keyword_ids[1];
- VALUE kwargs[1];
+ static ID keyword_ids[2];
+ VALUE kwargs[2];
VALUE resolv_timeout = Qnil;
+ VALUE connect_timeout = Qnil;
if (!keyword_ids[0]) {
CONST_ID(keyword_ids[0], "resolv_timeout");
+ CONST_ID(keyword_ids[1], "connect_timeout");
}
rb_scan_args(argc, argv, "22:", &remote_host, &remote_serv,
&local_host, &local_serv, &opt);
if (!NIL_P(opt)) {
- rb_get_kwargs(opt, keyword_ids, 0, 1, kwargs);
- if (kwargs[0] != Qundef) {
- resolv_timeout = kwargs[0];
- }
+ rb_get_kwargs(opt, keyword_ids, 0, 2, kwargs);
+ if (kwargs[0] != Qundef) { resolv_timeout = kwargs[0]; }
+ if (kwargs[1] != Qundef) { connect_timeout = kwargs[1]; }
}
return rsock_init_inetsock(sock, remote_host, remote_serv,
local_host, local_serv, INET_CLIENT,
- resolv_timeout);
+ resolv_timeout, connect_timeout);
}
static VALUE