summaryrefslogtreecommitdiff
path: root/src/lib/net/port.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-03-05 15:48:12 -0800
committerRuss Cox <rsc@golang.org>2009-03-05 15:48:12 -0800
commitd63ac64fe49b9b16ad5b0dc694e239b9af6e7e49 (patch)
tree2e4c53420fc217d01dd833031a7d14b42a6ba20c /src/lib/net/port.go
parente9ea1aa25a20daad0b07e6faf9f5a2e3ba456b0b (diff)
downloadgolang-d63ac64fe49b9b16ad5b0dc694e239b9af6e7e49.tar.gz
net: doc, doc-inspired cleanup
R=r DELTA=368 (87 added, 14 deleted, 267 changed) OCL=25773 CL=25786
Diffstat (limited to 'src/lib/net/port.go')
-rw-r--r--src/lib/net/port.go32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/lib/net/port.go b/src/lib/net/port.go
index 528264ad6..cc7f39914 100644
--- a/src/lib/net/port.go
+++ b/src/lib/net/port.go
@@ -14,12 +14,17 @@ import (
"strconv";
)
+// The error returned by LookupPort when a network service
+// is not listed in the database.
+var ErrNoService = os.NewError("unknown network service");
+
var services map[string] map[string] int
+var servicesError *os.Error
func readServices() {
services = make(map[string] map[string] int);
- // TODO(rsc): 6g won't let me do "file := "
- var file = open("/etc/services");
+ var file *file;
+ file, servicesError = open("/etc/services");
for line, ok := file.readLine(); ok; line, ok = file.readLine() {
// "http 80/tcp www www-http # World Wide Web HTTP"
if i := byteIndex(line, '#'); i >= 0 {
@@ -49,21 +54,24 @@ func readServices() {
file.close();
}
-func LookupPort(netw, name string) (port int, ok bool) {
+// LookupPort looks up the port for the given network and service.
+func LookupPort(network, service string) (port int, err *os.Error) {
once.Do(readServices);
- switch netw {
+ switch network {
case "tcp4", "tcp6":
- netw = "tcp";
+ network = "tcp";
case "udp4", "udp6":
- netw = "udp";
+ network = "udp";
}
- m, mok := services[netw];
- if !mok {
- return
+ m, ok := services[network];
+ if !ok {
+ return 0, ErrNoService;
+ }
+ port, ok = m[service];
+ if !ok {
+ return 0, ErrNoService;
}
- port, ok = m[name];
- return
+ return port, nil;
}
-