class WebSocket::Driver::Hybi

def send_frame(frame)

def send_frame(frame)
  length = frame.length
  header = (length <= 125) ? 2 : (length <= 65535 ? 4 : 10)
  offset = header + (frame.masked ? 4 : 0)
  buffer = []
  masked = frame.masked ? MASK : 0
  buffer[0] = (frame.final ? FIN : 0) |
              (frame.rsv1 ? RSV1 : 0) |
              (frame.rsv2 ? RSV2 : 0) |
              (frame.rsv3 ? RSV3 : 0) |
              frame.opcode
  if length <= 125
    buffer[1] = masked | length
  elsif length <= 65535
    buffer[1] = masked | 126
    buffer[2..3] = [length].pack(PACK_FORMATS[2]).bytes.to_a
  else
    buffer[1] = masked | 127
    buffer[2..9] = [length].pack(PACK_FORMATS[8]).bytes.to_a
  end
  if frame.masked
    buffer.concat(frame.masking_key.bytes.to_a)
    buffer.concat(Mask.mask(frame.payload, frame.masking_key).bytes.to_a)
  else
    buffer.concat(frame.payload.bytes.to_a)
  end
  @socket.write(buffer.pack('C*'))
end