Skip to content

Setting SO_LINGER completely inconsistent #4040

@etehtsea

Description

@etehtsea

MRI works / JRuby unsupported:
s.setsockopt(Socket::Option.linger(true, 0))


MRI works / JRuby accepted, but does nothing (broken):

require 'socket'; s = Socket.tcp('localhost', 6379); s.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, [1,0].pack('ii')); s.close

MRI:

17358   7700.821842 127.0.0.1   127.0.0.1   TCP 44  62123 → 6379 [RST, ACK] Seq=1 Ack=1 Win=408288 Len=0

JRuby:

17291   7541.692073 127.0.0.1   127.0.0.1   TCP 56  62096 → 6379 [FIN, ACK] Seq=1 Ack=1 Win=408288 Len=0 TSval=457027447 TSecr=457027443
17292   7541.692126 127.0.0.1   127.0.0.1   TCP 56  6379 → 62096 [ACK] Seq=1 Ack=2 Win=408288 Len=0 TSval=457027447 TSecr=457027447
17293   7541.692133 127.0.0.1   127.0.0.1   TCP 56  [TCP Dup ACK 17289#1] 62096 → 6379 [ACK] Seq=2 Ack=1 Win=408288 Len=0 TSval=457027447 TSecr=457027447
17294   7541.692164 127.0.0.1   127.0.0.1   TCP 56  6379 → 62096 [FIN, ACK] Seq=1 Ack=2 Win=408288 Len=0 TSval=457027447 TSecr=457027447
17295   7541.692252 127.0.0.1   127.0.0.1   TCP 56  62096 → 6379 [ACK] Seq=2 Ack=2 Win=408288 Len=0 TSval=457027447 TSecr=457027447

MRI unsupported / JRuby broken:

MRI:

[7] pry(main)> require 'socket'; s = Socket.tcp('localhost', 6379); s.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, 0); s.close
Errno::EINVAL: Invalid argument - setsockopt(2)
from (pry):7:in `setsockopt'

JRuby same as previous.


MRI unsupported / JRuby actually works:

require 'socket'; s = Socket.tcp('localhost', 6379); s.setsockopt(Socket::SOL_SOCKET, :LINGER, 0); s.close

MRI same as previous.

JRuby:

require 'socket'; s = Socket.tcp('localhost', 6379); s.setsockopt(Socket::SOL_SOCKET, :LINGER, 0); s.close
=> nil
17553   8085.477203 127.0.0.1   127.0.0.1   TCP 44  62165 → 6379 [RST, ACK] Seq=1 Ack=1 Win=408288 Len=0

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions