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.
7 func resolveNetAddr(op, net, addr string) (a Addr, err error) {
9 return nil, &OpError{op, net, nil, errMissingAddress}
12 case "tcp", "tcp4", "tcp6":
13 a, err = ResolveTCPAddr(net, addr)
14 case "udp", "udp4", "udp6":
15 a, err = ResolveUDPAddr(net, addr)
16 case "unix", "unixgram", "unixpacket":
17 a, err = ResolveUnixAddr(net, addr)
18 case "ip", "ip4", "ip6":
19 a, err = ResolveIPAddr(net, addr)
21 err = UnknownNetworkError(net)
24 return nil, &OpError{op, net + " " + addr, nil, err}
29 // Dial connects to the address addr on the network net.
31 // Known networks are "tcp", "tcp4" (IPv4-only), "tcp6" (IPv6-only),
32 // "udp", "udp4" (IPv4-only), "udp6" (IPv6-only), "ip", "ip4"
33 // (IPv4-only), "ip6" (IPv6-only), "unix" and "unixgram".
35 // For IP networks, addresses have the form host:port. If host is
36 // a literal IPv6 address, it must be enclosed in square brackets.
37 // The functions JoinHostPort and SplitHostPort manipulate
38 // addresses in this form.
41 // Dial("tcp", "12.34.56.78:80")
42 // Dial("tcp", "google.com:80")
43 // Dial("tcp", "[de:ad:be:ef::ca:fe]:80")
45 func Dial(net, addr string) (c Conn, err error) {
46 addri, err := resolveNetAddr("dial", net, addr)
50 switch ra := addri.(type) {
52 c, err = DialTCP(net, nil, ra)
54 c, err = DialUDP(net, nil, ra)
56 c, err = DialUnix(net, nil, ra)
58 c, err = DialIP(net, nil, ra)
60 err = &OpError{"dial", net + " " + addr, nil, UnknownNetworkError(net)}
68 // Listen announces on the local network address laddr.
69 // The network string net must be a stream-oriented
70 // network: "tcp", "tcp4", "tcp6", or "unix", or "unixpacket".
71 func Listen(net, laddr string) (l Listener, err error) {
73 case "tcp", "tcp4", "tcp6":
76 if la, err = ResolveTCPAddr(net, laddr); err != nil {
80 l, err := ListenTCP(net, la)
85 case "unix", "unixpacket":
88 if la, err = ResolveUnixAddr(net, laddr); err != nil {
92 l, err := ListenUnix(net, la)
98 return nil, UnknownNetworkError(net)
101 // ListenPacket announces on the local network address laddr.
102 // The network string net must be a packet-oriented network:
103 // "udp", "udp4", "udp6", or "unixgram".
104 func ListenPacket(net, laddr string) (c PacketConn, err error) {
106 case "udp", "udp4", "udp6":
109 if la, err = ResolveUDPAddr(net, laddr); err != nil {
113 c, err := ListenUDP(net, la)
121 if la, err = ResolveUnixAddr(net, laddr); err != nil {
125 c, err := DialUnix(net, la, nil)
133 if rawnet, _, err = splitNetProto(net); err != nil {
135 case "ip", "ip4", "ip6":
138 if la, err = ResolveIPAddr(rawnet, laddr); err != nil {
142 c, err := ListenIP(net, la)
150 return nil, UnknownNetworkError(net)