Home | History | Annotate | Download | only in net
      1 // Copyright 2012 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package net_test
      6 
      7 import (
      8 	"fmt"
      9 	"io"
     10 	"log"
     11 	"net"
     12 )
     13 
     14 func ExampleListener() {
     15 	// Listen on TCP port 2000 on all available unicast and
     16 	// anycast IP addresses of the local system.
     17 	l, err := net.Listen("tcp", ":2000")
     18 	if err != nil {
     19 		log.Fatal(err)
     20 	}
     21 	defer l.Close()
     22 	for {
     23 		// Wait for a connection.
     24 		conn, err := l.Accept()
     25 		if err != nil {
     26 			log.Fatal(err)
     27 		}
     28 		// Handle the connection in a new goroutine.
     29 		// The loop then returns to accepting, so that
     30 		// multiple connections may be served concurrently.
     31 		go func(c net.Conn) {
     32 			// Echo all incoming data.
     33 			io.Copy(c, c)
     34 			// Shut down the connection.
     35 			c.Close()
     36 		}(conn)
     37 	}
     38 }
     39 
     40 func ExampleIPv4() {
     41 	fmt.Println(net.IPv4(8, 8, 8, 8))
     42 
     43 	// Output:
     44 	// 8.8.8.8
     45 }
     46 
     47 func ExampleParseCIDR() {
     48 	ipv4Addr, ipv4Net, err := net.ParseCIDR("192.0.2.1/24")
     49 	if err != nil {
     50 		log.Fatal(err)
     51 	}
     52 	fmt.Println(ipv4Addr)
     53 	fmt.Println(ipv4Net)
     54 
     55 	ipv6Addr, ipv6Net, err := net.ParseCIDR("2001:db8:a0b:12f0::1/32")
     56 	if err != nil {
     57 		log.Fatal(err)
     58 	}
     59 	fmt.Println(ipv6Addr)
     60 	fmt.Println(ipv6Net)
     61 
     62 	// Output:
     63 	// 192.0.2.1
     64 	// 192.0.2.0/24
     65 	// 2001:db8:a0b:12f0::1
     66 	// 2001:db8::/32
     67 }
     68 
     69 func ExampleParseIP() {
     70 	fmt.Println(net.ParseIP("192.0.2.1"))
     71 	fmt.Println(net.ParseIP("2001:db8::68"))
     72 	fmt.Println(net.ParseIP("192.0.2"))
     73 
     74 	// Output:
     75 	// 192.0.2.1
     76 	// 2001:db8::68
     77 	// <nil>
     78 }
     79 
     80 func ExampleIP_DefaultMask() {
     81 	ip := net.ParseIP("192.0.2.1")
     82 	fmt.Println(ip.DefaultMask())
     83 
     84 	// Output:
     85 	// ffffff00
     86 }
     87 
     88 func ExampleIP_Mask() {
     89 	ipv4Addr := net.ParseIP("192.0.2.1")
     90 	// This mask corresponds to a /24 subnet for IPv4.
     91 	ipv4Mask := net.CIDRMask(24, 32)
     92 	fmt.Println(ipv4Addr.Mask(ipv4Mask))
     93 
     94 	ipv6Addr := net.ParseIP("2001:db8:a0b:12f0::1")
     95 	// This mask corresponds to a /32 subnet for IPv6.
     96 	ipv6Mask := net.CIDRMask(32, 128)
     97 	fmt.Println(ipv6Addr.Mask(ipv6Mask))
     98 
     99 	// Output:
    100 	// 192.0.2.0
    101 	// 2001:db8::
    102 }
    103 
    104 func ExampleCIDRMask() {
    105 	// This mask corresponds to a /31 subnet for IPv4.
    106 	fmt.Println(net.CIDRMask(31, 32))
    107 
    108 	// This mask corresponds to a /64 subnet for IPv6.
    109 	fmt.Println(net.CIDRMask(64, 128))
    110 
    111 	// Output:
    112 	// fffffffe
    113 	// ffffffffffffffff0000000000000000
    114 }
    115 
    116 func ExampleIPv4Mask() {
    117 	fmt.Println(net.IPv4Mask(255, 255, 255, 0))
    118 
    119 	// Output:
    120 	// ffffff00
    121 }
    122