class EventMachine::Synchrony::TCPSocket

def send(msg, flags)

def send(msg, flags)
  raise "Unknown flags in send(): #{flags}" if flags.nonzero?
  # write(X) on a socket after #close, raises IOError with message "closed stream"
  # send(X,0) on a socket after #close, raises IOError with message "closed stream"
  raise IOError, "closed stream" if @closed
  # the first write(X) on a remotely closed socket, <= than some buffer size, generates no error
  # the first write(X) on a remotely closed socket, > than some buffer size, generates no error
  # (on my box this buffer appears to be 80KB)
  # further write(X) on a remotely closed socket, raises Errno::EPIPE
  # the first send(X,0) on a remotely closed socket, <= than some buffer size, generates no error
  # the first send(X,0) on a remotely closed socket, > than some buffer size, generates no error
  # (on my box this buffer appears to be 80KB)
  # further send(X,0) on a remotely closed socket, raises Errno::EPIPE
  raise Errno::EPIPE if @remote_closed
  
  len = msg.bytesize
  # write(X) on an open socket, where the remote end closes during the write, raises Errno::EPIPE
  # send(X,0) on an open socket, where the remote end closes during the write, raises Errno::EPIPE
  write_data(msg) or sync(:out) or raise(Errno::EPIPE)
  len
end