@@ -64,34 +64,29 @@ def getsockopt(level, optname)
64
64
Socket ::Option . new ( family , level , optname , data )
65
65
end
66
66
67
- def setsockopt ( level_or_option , optname = nil , optval = nil )
68
- if level_or_option and optname and optval
69
- if level_or_option . is_a? ( Socket ::Option )
70
- raise TypeError ,
71
- 'expected the first argument to be a Integer, Symbol, or String'
72
- end
73
-
74
- level = level_or_option
75
- elsif level_or_option . is_a? ( Socket ::Option )
76
- raise ( ArgumentError , 'given 2, expected 1' ) if optname
77
-
78
- level = level_or_option . level
79
- optname = level_or_option . optname
80
- optval = level_or_option . data
67
+ def setsockopt ( *args )
68
+ if args . size == 1
69
+ option = args [ 0 ]
70
+ level = option . level
71
+ optname = option . optname
72
+ optval = option . data
73
+ elsif args . size == 3
74
+ level , optname , optval = args
81
75
else
82
- raise TypeError ,
83
- 'expected the first argument to be a Integer, Symbol, String, or Socket::Option'
76
+ Truffle ::Type . check_arity ( args . size , 3 , 3 )
84
77
end
85
78
86
- optval = 1 if optval == true
87
- optval = 0 if optval == false
88
-
89
79
sockname = Truffle ::Socket ::Foreign . getsockname ( @descriptor )
90
80
family = Truffle ::Socket . family_for_sockaddr_in ( sockname )
91
81
level = Truffle ::Socket ::SocketOptions . socket_level ( level , family )
92
82
optname = Truffle ::Socket ::SocketOptions . socket_option ( level , optname )
93
83
error = 0
94
84
85
+ case optval
86
+ when true then optval = 1
87
+ when false then optval = 0
88
+ end
89
+
95
90
if optval . is_a? ( Integer )
96
91
Truffle ::Socket ::Foreign . memory_pointer ( :socklen_t ) do |pointer |
97
92
pointer . write_int ( optval )
0 commit comments