...
Source file
src/net/port_unix.go
Documentation: net
1
2
3
4
5
6
7
8
9 package net
10
11 import "sync"
12
13 var onceReadServices sync.Once
14
15 func readServices() {
16 file, err := open("/etc/services")
17 if err != nil {
18 return
19 }
20 defer file.close()
21
22 for line, ok := file.readLine(); ok; line, ok = file.readLine() {
23
24 if i := byteIndex(line, '#'); i >= 0 {
25 line = line[:i]
26 }
27 f := getFields(line)
28 if len(f) < 2 {
29 continue
30 }
31 portnet := f[1]
32 port, j, ok := dtoi(portnet)
33 if !ok || port <= 0 || j >= len(portnet) || portnet[j] != '/' {
34 continue
35 }
36 netw := portnet[j+1:]
37 m, ok1 := services[netw]
38 if !ok1 {
39 m = make(map[string]int)
40 services[netw] = m
41 }
42 for i := 0; i < len(f); i++ {
43 if i != 1 {
44 m[f[i]] = port
45 }
46 }
47 }
48 }
49
50
51 func goLookupPort(network, service string) (port int, err error) {
52 onceReadServices.Do(readServices)
53 return lookupPortMap(network, service)
54 }
55
View as plain text