Module: Fluent::PluginHelper::SocketOption
Constant Summary collapse
- FORMAT_STRUCT_LINGER =
{ int l_onoff; int l_linger; }
'I!I!'
- FORMAT_STRUCT_TIMEVAL =
{ time_t tv_sec; suseconds_t tv_usec; }
'L!L!'
Instance Method Summary collapse
- #socket_option_set(sock, resolve_name: nil, nonblock: false, linger_timeout: nil, recv_timeout: nil, send_timeout: nil) ⇒ Object
- #socket_option_set_one(sock, option, value) ⇒ Object
- #socket_option_validate!(protocol, resolve_name: nil, linger_timeout: nil, recv_timeout: nil, send_timeout: nil) ⇒ Object
Instance Method Details
#socket_option_set(sock, resolve_name: nil, nonblock: false, linger_timeout: nil, recv_timeout: nil, send_timeout: nil) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/fluent/plugin_helper/socket_option.rb', line 40 def socket_option_set(sock, resolve_name: nil, nonblock: false, linger_timeout: nil, recv_timeout: nil, send_timeout: nil) unless resolve_name.nil? sock.do_not_reverse_lookup = !resolve_name end if nonblock sock.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK) end if linger_timeout optval = [1, linger_timeout.to_i].pack(FORMAT_STRUCT_LINGER) socket_option_set_one(sock, :SO_LINGER, optval) end if recv_timeout optval = [recv_timeout.to_i, 0].pack(FORMAT_STRUCT_TIMEVAL) socket_option_set_one(sock, :SO_RCVTIMEO, optval) end if send_timeout optval = [send_timeout.to_i, 0].pack(FORMAT_STRUCT_TIMEVAL) socket_option_set_one(sock, :SO_SNDTIMEO, optval) end sock end |
#socket_option_set_one(sock, option, value) ⇒ Object
62 63 64 65 66 |
# File 'lib/fluent/plugin_helper/socket_option.rb', line 62 def socket_option_set_one(sock, option, value) sock.setsockopt(::Socket::SOL_SOCKET, option, value) rescue => e log.warn "failed to set socket option", sock: sock.class, option: option, value: value, error: e end |
#socket_option_validate!(protocol, resolve_name: nil, linger_timeout: nil, recv_timeout: nil, send_timeout: nil) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/fluent/plugin_helper/socket_option.rb', line 27 def socket_option_validate!(protocol, resolve_name: nil, linger_timeout: nil, recv_timeout: nil, send_timeout: nil) unless resolve_name.nil? if protocol != :tcp && protocol != :udp && protocol != :tls raise ArgumentError, "BUG: resolve_name in available for tcp/udp/tls" end end if linger_timeout if protocol != :tcp && protocol != :tls raise ArgumentError, "BUG: linger_timeout is available for tcp/tls" end end end |