Class: Socket::Option
- Inherits:
-
Object
- Object
- Socket::Option
- Defined in:
- lib/rubysl/socket.rb
Instance Attribute Summary collapse
-
#data ⇒ Object
(also: #to_s)
readonly
Returns the value of attribute data.
-
#family ⇒ Object
readonly
Returns the value of attribute family.
-
#level ⇒ Object
readonly
Returns the value of attribute level.
-
#optname ⇒ Object
readonly
Returns the value of attribute optname.
Class Method Summary collapse
- .bool(family, level, optname, bool) ⇒ Object
- .int(family, level, optname, integer) ⇒ Object
- .linger(onoff, secs) ⇒ Object
Instance Method Summary collapse
- #bool ⇒ Object
-
#initialize(family, level, optname, data) ⇒ Option
constructor
A new instance of Option.
- #inspect ⇒ Object
- #int ⇒ Object
- #linger ⇒ Object
- #unpack(template) ⇒ Object
Constructor Details
#initialize(family, level, optname, data) ⇒ Option
Returns a new instance of Option.
650 651 652 653 654 655 656 657 658 |
# File 'lib/rubysl/socket.rb', line 650 def initialize(family, level, optname, data) @family = family_arg(family) @family_name = family @level = level_arg(@family, level) @level_name = level @optname = optname_arg(@level, optname) @opt_name = optname @data = data end |
Instance Attribute Details
#data ⇒ Object (readonly) Also known as: to_s
Returns the value of attribute data.
622 623 624 |
# File 'lib/rubysl/socket.rb', line 622 def data @data end |
#family ⇒ Object (readonly)
Returns the value of attribute family.
622 623 624 |
# File 'lib/rubysl/socket.rb', line 622 def family @family end |
#level ⇒ Object (readonly)
Returns the value of attribute level.
622 623 624 |
# File 'lib/rubysl/socket.rb', line 622 def level @level end |
#optname ⇒ Object (readonly)
Returns the value of attribute optname.
622 623 624 |
# File 'lib/rubysl/socket.rb', line 622 def optname @optname end |
Class Method Details
.bool(family, level, optname, bool) ⇒ Object
624 625 626 627 |
# File 'lib/rubysl/socket.rb', line 624 def self.bool(family, level, optname, bool) data = [(bool ? 1 : 0)].pack('i') new family, level, optname, data end |
.int(family, level, optname, integer) ⇒ Object
629 630 631 |
# File 'lib/rubysl/socket.rb', line 629 def self.int(family, level, optname, integer) new family, level, optname, [integer].pack('i') end |
.linger(onoff, secs) ⇒ Object
633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 |
# File 'lib/rubysl/socket.rb', line 633 def self.linger(onoff, secs) linger = Socket::Foreign::Linger.new case onoff when Integer linger[:l_onoff] = onoff else linger[:l_onoff] = onoff ? 1 : 0 end linger[:l_linger] = secs p = linger.to_ptr data = p.read_string(p.total) new :UNSPEC, :SOCKET, :LINGER, data end |
Instance Method Details
#bool ⇒ Object
668 669 670 671 672 673 674 675 676 |
# File 'lib/rubysl/socket.rb', line 668 def bool unless @data.length == Rubinius::FFI.type_size(:int) raise TypeError, "size differ. expected as sizeof(int)=" + "#{Rubinius::FFI.type_size(:int)} but #{@data.length}" end i = @data.unpack('i').first i == 0 ? false : true end |
#inspect ⇒ Object
664 665 666 |
# File 'lib/rubysl/socket.rb', line 664 def inspect "#<#{self.class}: #@family_name #@level_name #@opt_name #{@data.inspect}>" end |
#int ⇒ Object
678 679 680 681 682 683 684 |
# File 'lib/rubysl/socket.rb', line 678 def int unless @data.length == Rubinius::FFI.type_size(:int) raise TypeError, "size differ. expected as sizeof(int)=" + "#{Rubinius::FFI.type_size(:int)} but #{@data.length}" end @data.unpack('i').first end |
#linger ⇒ Object
686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 |
# File 'lib/rubysl/socket.rb', line 686 def linger if @level != Socket::SOL_SOCKET || @optname != Socket::SO_LINGER raise TypeError, "linger socket option expected" end if @data.bytesize != FFI.config("linger.sizeof") raise TypeError, "size differ. expected as sizeof(struct linger)=" + "#{FFI.config("linger.sizeof")} but #{@data.length}" end linger = Socket::Foreign::Linger.new linger.to_ptr.write_string @data, @data.bytesize onoff = nil case linger[:l_onoff] when 0 then onoff = false when 1 then onoff = true else onoff = linger[:l_onoff].to_i end [onoff, linger[:l_linger].to_i] end |
#unpack(template) ⇒ Object
660 661 662 |
# File 'lib/rubysl/socket.rb', line 660 def unpack(template) @data.unpack template end |