1
2
3
4
5 package net
6
7 import "os"
8
9 func resolveNetAddr(op, net, addr string) (a Addr, err os.Error) {
10 if addr == "" {
11 return nil, &OpError{op, net, nil, errMissingAddress}
12 }
13 switch net {
14 case "tcp", "tcp4", "tcp6":
15 a, err = ResolveTCPAddr(net, addr)
16 case "udp", "udp4", "udp6":
17 a, err = ResolveUDPAddr(net, addr)
18 case "unix", "unixgram", "unixpacket":
19 a, err = ResolveUnixAddr(net, addr)
20 case "ip", "ip4", "ip6":
21 a, err = ResolveIPAddr(net, addr)
22 default:
23 err = UnknownNetworkError(net)
24 }
25 if err != nil {
26 return nil, &OpError{op, net + " " + addr, nil, err}
27 }
28 return
29 }
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 func Dial(net, addr string) (c Conn, err os.Error) {
48 addri, err := resolveNetAddr("dial", net, addr)
49 if err != nil {
50 return nil, err
51 }
52 switch ra := addri.(type) {
53 case *TCPAddr:
54 c, err = DialTCP(net, nil, ra)
55 case *UDPAddr:
56 c, err = DialUDP(net, nil, ra)
57 case *UnixAddr:
58 c, err = DialUnix(net, nil, ra)
59 case *IPAddr:
60 c, err = DialIP(net, nil, ra)
61 default:
62 err = UnknownNetworkError(net)
63 }
64 if err != nil {
65 return nil, &OpError{"dial", net + " " + addr, nil, err}
66 }
67 return
68 }
69
70
71
72
73 func Listen(net, laddr string) (l Listener, err os.Error) {
74 switch net {
75 case "tcp", "tcp4", "tcp6":
76 var la *TCPAddr
77 if laddr != "" {
78 if la, err = ResolveTCPAddr(net, laddr); err != nil {
79 return nil, err
80 }
81 }
82 l, err := ListenTCP(net, la)
83 if err != nil {
84 return nil, err
85 }
86 return l, nil
87 case "unix", "unixpacket":
88 var la *UnixAddr
89 if laddr != "" {
90 if la, err = ResolveUnixAddr(net, laddr); err != nil {
91 return nil, err
92 }
93 }
94 l, err := ListenUnix(net, la)
95 if err != nil {
96 return nil, err
97 }
98 return l, nil
99 }
100 return nil, UnknownNetworkError(net)
101 }
102
103
104
105
106 func ListenPacket(net, laddr string) (c PacketConn, err os.Error) {
107 switch net {
108 case "udp", "udp4", "udp6":
109 var la *UDPAddr
110 if laddr != "" {
111 if la, err = ResolveUDPAddr(net, laddr); err != nil {
112 return nil, err
113 }
114 }
115 c, err := ListenUDP(net, la)
116 if err != nil {
117 return nil, err
118 }
119 return c, nil
120 case "unixgram":
121 var la *UnixAddr
122 if laddr != "" {
123 if la, err = ResolveUnixAddr(net, laddr); err != nil {
124 return nil, err
125 }
126 }
127 c, err := DialUnix(net, la, nil)
128 if err != nil {
129 return nil, err
130 }
131 return c, nil
132 }
133
134 var rawnet string
135 if rawnet, _, err = splitNetProto(net); err != nil {
136 switch rawnet {
137 case "ip", "ip4", "ip6":
138 var la *IPAddr
139 if laddr != "" {
140 if la, err = ResolveIPAddr(rawnet, laddr); err != nil {
141 return nil, err
142 }
143 }
144 c, err := ListenIP(net, la)
145 if err != nil {
146 return nil, err
147 }
148 return c, nil
149 }
150 }
151
152 return nil, UnknownNetworkError(net)
153 }