class IO::Event::Selector::Select

def io_write(fiber, io, buffer, length, offset = 0)

@parameter offset [Integer] The offset into the buffer to write from.
@parameter length [Integer] The minimum number of bytes to write.
def io_write(fiber, io, buffer, length, offset = 0)
	total = 0
	
	Selector.nonblock(io) do
		while true
			result = Fiber.blocking{buffer.write(io, 0, offset)}
			
			if result < 0
				if again?(result)
					self.io_wait(fiber, io, IO::READABLE)
				else
					return result
				end
			elsif result == 0
				break result
			else
				total += result
				break if total >= length
				offset += result
			end
		end
	end
	
	return total
end