OSDN Git Service

net/http: delete temporary files.
[pf3gnuchains/gcc-fork.git] / libgo / go / net / iprawsock.go
1 // Copyright 2010 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 // (Raw) IP sockets
6
7 package net
8
9 // IPAddr represents the address of a IP end point.
10 type IPAddr struct {
11         IP IP
12 }
13
14 // Network returns the address's network name, "ip".
15 func (a *IPAddr) Network() string { return "ip" }
16
17 func (a *IPAddr) String() string {
18         if a == nil {
19                 return "<nil>"
20         }
21         return a.IP.String()
22 }
23
24 // ResolveIPAddr parses addr as a IP address and resolves domain
25 // names to numeric addresses on the network net, which must be
26 // "ip", "ip4" or "ip6".  A literal IPv6 host address must be
27 // enclosed in square brackets, as in "[::]".
28 func ResolveIPAddr(net, addr string) (*IPAddr, error) {
29         ip, err := hostToIP(net, addr)
30         if err != nil {
31                 return nil, err
32         }
33         return &IPAddr{ip}, nil
34 }
35
36 // Convert "host" into IP address.
37 func hostToIP(net, host string) (ip IP, err error) {
38         var addr IP
39         // Try as an IP address.
40         addr = ParseIP(host)
41         if addr == nil {
42                 filter := anyaddr
43                 if net != "" && net[len(net)-1] == '4' {
44                         filter = ipv4only
45                 }
46                 if net != "" && net[len(net)-1] == '6' {
47                         filter = ipv6only
48                 }
49                 // Not an IP address.  Try as a DNS name.
50                 addrs, err1 := LookupHost(host)
51                 if err1 != nil {
52                         err = err1
53                         goto Error
54                 }
55                 addr = firstFavoriteAddr(filter, addrs)
56                 if addr == nil {
57                         // should not happen
58                         err = &AddrError{"LookupHost returned no suitable address", addrs[0]}
59                         goto Error
60                 }
61         }
62         return addr, nil
63 Error:
64         return nil, err
65 }