Improve documentation
This commit is contained in:
21
README.md
21
README.md
@@ -8,8 +8,29 @@ instead of the load balancer.
|
|||||||
|
|
||||||
This library provides both a net.Listener and net.Conn implementation that
|
This library provides both a net.Listener and net.Conn implementation that
|
||||||
can be used to handle situation in which you may be using the proxy protocol.
|
can be used to handle situation in which you may be using the proxy protocol.
|
||||||
|
Only proxy protocol version 1, the human-readable form, is understood.
|
||||||
|
|
||||||
The only caveat is that we check for the "PROXY " prefix to determine if the protocol
|
The only caveat is that we check for the "PROXY " prefix to determine if the protocol
|
||||||
is being used. If that string may occur as part of your input, then it is ambiguous
|
is being used. If that string may occur as part of your input, then it is ambiguous
|
||||||
if the protocol is being used and you may have problems.
|
if the protocol is being used and you may have problems.
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
|
||||||
|
Full documentation can be found [here](http://godoc.org/github.com/armon/go-proxyproto).
|
||||||
|
|
||||||
|
# Examples
|
||||||
|
|
||||||
|
Using the library is very simple:
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
// Create a listener
|
||||||
|
list, err := net.Listen("tcp", "...")
|
||||||
|
|
||||||
|
// Wrap listener in a proxyproto listener
|
||||||
|
proxyList := &proxyproto.Listener{list}
|
||||||
|
conn, err :=proxyList.Accept()
|
||||||
|
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
|||||||
10
protocol.go
10
protocol.go
@@ -68,6 +68,9 @@ func NewConn(conn net.Conn) *Conn {
|
|||||||
return pConn
|
return pConn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Read is check for the proxy protocol header when doing
|
||||||
|
// the initial scan. If there is an error parsing the header,
|
||||||
|
// it is returned and the socket is closed.
|
||||||
func (p *Conn) Read(b []byte) (int, error) {
|
func (p *Conn) Read(b []byte) (int, error) {
|
||||||
var err error
|
var err error
|
||||||
p.once.Do(func() { err = p.checkPrefix() })
|
p.once.Do(func() { err = p.checkPrefix() })
|
||||||
@@ -89,6 +92,13 @@ func (p *Conn) LocalAddr() net.Addr {
|
|||||||
return p.conn.LocalAddr()
|
return p.conn.LocalAddr()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RemoteAddr returns the address of the client if the proxy
|
||||||
|
// protocol is being used, otherwise just returns the address of
|
||||||
|
// the socket peer. If there is an error parsing the header, the
|
||||||
|
// address of the client is not returned, and the socket is closed.
|
||||||
|
// Once implication of this is that the call could block if the
|
||||||
|
// client is slow. Using a Deadline is recommended if this is called
|
||||||
|
// before Read()
|
||||||
func (p *Conn) RemoteAddr() net.Addr {
|
func (p *Conn) RemoteAddr() net.Addr {
|
||||||
p.once.Do(func() {
|
p.once.Do(func() {
|
||||||
if err := p.checkPrefix(); err != nil {
|
if err := p.checkPrefix(); err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user