diff options
author | Masaki Matsushita <[email protected]> | 2020-09-25 16:20:18 +0900 |
---|---|---|
committer | Masaki Matsushita <[email protected]> | 2020-12-10 20:52:29 +0900 |
commit | 78f188524f551c97b1a7a44ae13514729f1a21c7 (patch) | |
tree | eb334c023f4571b883221cbaa7a149352ac83b9c /ext/socket/tcpsocket.c | |
parent | 658b4ff60934b9fb6845e214fda83229e631e366 (diff) |
Add connect_timeout to TCPSocket
Add connect_timeout to TCPSocket.new in the same way as Socket.tcp.
Closes [Feature #17187]
Diffstat (limited to 'ext/socket/tcpsocket.c')
-rw-r--r-- | ext/socket/tcpsocket.c | 18 |
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 |