package imapserver import ( "net" ) // prefixConn is a net.Conn with a buffer from which the first reads are satisfied. // used for STARTTLS where already did a buffered read of initial TLS data. type prefixConn struct { prefix []byte net.Conn } func (c *prefixConn) Read(buf []byte) (int, error) { if len(c.prefix) > 0 { n := len(buf) if n > len(c.prefix) { n = len(c.prefix) } copy(buf[:n], c.prefix[:n]) c.prefix = c.prefix[n:] if len(c.prefix) == 0 { c.prefix = nil } return n, nil } return c.Conn.Read(buf) }