LEFT | RIGHT |
1 // Copyright 2009 The Go Authors. All rights reserved. | 1 // Copyright 2009 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 // HTTP server. See RFC 2616. | 5 // HTTP server. See RFC 2616. |
6 | 6 |
7 package http | 7 package http |
8 | 8 |
9 import ( | 9 import ( |
10 "bufio" | 10 "bufio" |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
421 | 421 |
422 // Create new connection from rwc. | 422 // Create new connection from rwc. |
423 func (srv *Server) newConn(rwc net.Conn) (c *conn, err error) { | 423 func (srv *Server) newConn(rwc net.Conn) (c *conn, err error) { |
424 c = new(conn) | 424 c = new(conn) |
425 c.remoteAddr = rwc.RemoteAddr().String() | 425 c.remoteAddr = rwc.RemoteAddr().String() |
426 c.server = srv | 426 c.server = srv |
427 c.rwc = rwc | 427 c.rwc = rwc |
428 if debugServerConnections { | 428 if debugServerConnections { |
429 c.rwc = newLoggingConn("server", c.rwc) | 429 c.rwc = newLoggingConn("server", c.rwc) |
430 } | 430 } |
431 c.setState(c.rwc, StateNew) | |
432 c.sr = liveSwitchReader{r: c.rwc} | 431 c.sr = liveSwitchReader{r: c.rwc} |
433 c.lr = io.LimitReader(&c.sr, noLimit).(*io.LimitedReader) | 432 c.lr = io.LimitReader(&c.sr, noLimit).(*io.LimitedReader) |
434 br := newBufioReader(c.lr) | 433 br := newBufioReader(c.lr) |
435 bw := newBufioWriterSize(c.rwc, 4<<10) | 434 bw := newBufioWriterSize(c.rwc, 4<<10) |
436 c.buf = bufio.NewReadWriter(br, bw) | 435 c.buf = bufio.NewReadWriter(br, bw) |
437 return c, nil | 436 return c, nil |
438 } | 437 } |
439 | 438 |
440 var ( | 439 var ( |
441 bufioReaderPool sync.Pool | 440 bufioReaderPool sync.Pool |
(...skipping 1273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1715 time.Sleep(tempDelay) | 1714 time.Sleep(tempDelay) |
1716 continue | 1715 continue |
1717 } | 1716 } |
1718 return e | 1717 return e |
1719 } | 1718 } |
1720 tempDelay = 0 | 1719 tempDelay = 0 |
1721 c, err := srv.newConn(rw) | 1720 c, err := srv.newConn(rw) |
1722 if err != nil { | 1721 if err != nil { |
1723 continue | 1722 continue |
1724 } | 1723 } |
| 1724 c.setState(c.rwc, StateNew) // before Serve can return |
1725 go c.serve() | 1725 go c.serve() |
1726 } | 1726 } |
1727 } | 1727 } |
1728 | 1728 |
1729 func (s *Server) doKeepAlives() bool { | 1729 func (s *Server) doKeepAlives() bool { |
1730 return atomic.LoadInt32(&s.disableKeepAlives) == 0 | 1730 return atomic.LoadInt32(&s.disableKeepAlives) == 0 |
1731 } | 1731 } |
1732 | 1732 |
1733 // SetKeepAlivesEnabled controls whether HTTP keep-alives are enabled. | 1733 // SetKeepAlivesEnabled controls whether HTTP keep-alives are enabled. |
1734 // By default, keep-alives are always enabled. Only very | 1734 // By default, keep-alives are always enabled. Only very |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2040 log.Printf("%s.Read(%d) = %d, %v", c.name, len(p), n, err) | 2040 log.Printf("%s.Read(%d) = %d, %v", c.name, len(p), n, err) |
2041 return | 2041 return |
2042 } | 2042 } |
2043 | 2043 |
2044 func (c *loggingConn) Close() (err error) { | 2044 func (c *loggingConn) Close() (err error) { |
2045 log.Printf("%s.Close() = ...", c.name) | 2045 log.Printf("%s.Close() = ...", c.name) |
2046 err = c.Conn.Close() | 2046 err = c.Conn.Close() |
2047 log.Printf("%s.Close() = %v", c.name, err) | 2047 log.Printf("%s.Close() = %v", c.name, err) |
2048 return | 2048 return |
2049 } | 2049 } |
LEFT | RIGHT |