|  | // Copyright 2012 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package net_test | 
|  |  | 
|  | import ( | 
|  | "io" | 
|  | "log" | 
|  | "net" | 
|  | ) | 
|  |  | 
|  | func ExampleListener() { | 
|  | // Listen on TCP port 2000 on all interfaces. | 
|  | l, err := net.Listen("tcp", ":2000") | 
|  | if err != nil { | 
|  | log.Fatal(err) | 
|  | } | 
|  | defer l.Close() | 
|  | for { | 
|  | // Wait for a connection. | 
|  | conn, err := l.Accept() | 
|  | if err != nil { | 
|  | log.Fatal(err) | 
|  | } | 
|  | // Handle the connection in a new goroutine. | 
|  | // The loop then returns to accepting, so that | 
|  | // multiple connections may be served concurrently. | 
|  | go func(c net.Conn) { | 
|  | // Echo all incoming data. | 
|  | io.Copy(c, c) | 
|  | // Shut down the connection. | 
|  | c.Close() | 
|  | }(conn) | 
|  | } | 
|  | } |