Delta Between Two Patch Sets: 2013/distsys/finger.go
Issue 61570044 :
code review 61570044: go.talks: add two talks by rsc (Closed)
Left Patch Set:
Right Patch Set: diff -r 5c1ef7ac81bc https://code.google.com/p/go.talks
Use n/p to move between diff chunks;
N/P to move between comments.
Please Sign in to add in-line comments.
Jump to:
2013/distsys.slide
2013/distsys/addr1.go
2013/distsys/addr2.go
2013/distsys/addr3.go
2013/distsys/addr4.go
2013/distsys/addr5.go
2013/distsys/finger.go
2013/distsys/hello.go
2013/distsys/hello0.go
2013/distsys/hello1.go
2013/distsys/replread.go
2013/distsys/replwrite.go
2013/distsys/writebuffer.go
2013/distsys/writebuffer2.go
2014/research.slide
LEFT RIGHT
(no file at all) 1 package main
2
3 import (
4 "bufio"
5 "io"
6 "log"
7 "net"
8 "os"
9 "os/exec"
10 )
11
12 func main() {
13 if len(os.Args) > 1 && os.Args[1] == "serve" {
14 serve()
15 }
16 finger()
17 }
18
19 func finger() {
20 c, err := net.Dial("tcp", "localhost:finger")
21 if err != nil {
22 log.Fatal(err)
23 }
24 io.WriteString(c, "rsc\n")
25 io.Copy(os.Stdout, c)
26 }
27
28 func serve() {
29 l, err := net.Listen("tcp", "localhost:finger")
30 if err != nil {
31 log.Fatal(err)
32 }
33 for {
34 c, err := l.Accept()
35 if err != nil {
36 log.Fatal(err)
37 }
38 go serveConn(c)
39 }
40 }
41
42 func serveConn(c net.Conn) {
43 defer c.Close()
44
45 b := bufio.NewReader(c)
46 l, err := b.ReadString('\n')
47 if err != nil {
48 return
49 }
50
51 cmd := exec.Command("finger", l[:len(l)-1])
52 cmd.Stdout = c
53 cmd.Stderr = c
54 cmd.Run()
55 }
LEFT RIGHT