Class: IO

Class IO |
In: | lib/phusion_passenger/utils.rb
Parent: | Object

Methods

- close_on_exec!
- close_on_exec!
- writev
- writev2
- writev3

Public Instance methods
close_on_exec!()

[ show source ]

          # File lib/phusion_passenger/utils.rb, line 1001
    1001:                 def close_on_exec!
    1002:                 end

close_on_exec!()

[ show source ]

         # File lib/phusion_passenger/utils.rb, line 997
    997:                 def close_on_exec!
    998:                         fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
    999:                 end

writev(components)

Writes all of the strings in the `components` array into the given file descriptor using the +writev()+ system call. Unlike IO#write, this method does not require one to concatenate all those strings into a single buffer in order to send the data in a single system call. Thus, #writev is a great way to perform zero-copy I/O.

Unlike the raw writev() system call, this method ensures that all given data is written before returning, by performing multiple writev() calls and whatever else is necessary.

      io.writev(["hello ", "world", "\n"])

[ show source ]

         # File lib/phusion_passenger/utils.rb, line 973
    973:                 def writev(components)
    974:                         return PhusionPassenger::NativeSupport.writev(fileno, components)
    975:                 end

writev2(components, components2)

Like #writev, but accepts two arrays. The data is written in the given order.

      io.writev2(["hello ", "world", "\n"], ["another ", "message\n"])

[ show source ]

         # File lib/phusion_passenger/utils.rb, line 980
    980:                 def writev2(components, components2)
    981:                         return PhusionPassenger::NativeSupport.writev2(fileno,
    982:                                 components, components2)
    983:                 end

writev3(components, components2, components3)

Like #writev, but accepts three arrays. The data is written in the given order.

      io.writev3(["hello ", "world", "\n"],
        ["another ", "message\n"],
        ["yet ", "another ", "one", "\n"])

[ show source ]

         # File lib/phusion_passenger/utils.rb, line 990
    990:                 def writev3(components, components2, components3)
    991:                         return PhusionPassenger::NativeSupport.writev3(fileno,
    992:                                 components, components2, components3)
    993:                 end