aca60b87581a338feb1d9bf72ef8911798c7c7a0
[svn42.git] / door_daemon_go / unix_socket_server.go
1 package main
2 import "fmt"
3 import "net"
4 import "bufio"
5
6 func handleConnection(c net.Conn) () {
7     fmt.Println("new connection")
8     var client *bufio.ReadWriter;
9     {
10       client_r := bufio.NewReaderSize(c,14)
11       client_w := bufio.NewWriterSize(c,14)
12       client = bufio.NewReadWriter(client_r,client_w)
13     }
14     for {
15           wasPrefix:=false
16           var line string
17           for isPrefix:=true;isPrefix; {
18             var lineBuf []byte 
19             var err error
20             lineBuf,isPrefix,err = client.ReadLine()
21             if err != nil {
22                 fmt.Printf("Readline Error: %s\n",err.Error())
23                 c.Close()
24                 return
25             }
26             if isPrefix {
27               wasPrefix=true
28             } else {
29               line=string(lineBuf)
30             }
31           }
32           if wasPrefix {
33               fmt.Println("line too long")
34               fmt.Fprintf(client,"line too long\n")
35               client.Flush()
36               continue
37           }
38           fmt.Printf("Received: %v\n", string(line))
39 //
40 //        data := buf[0:nr]
41 //        fmt.Printf("Received: %v", string(data))
42 //        _, err = c.Write(data)
43 //        if err != nil {
44 //            fmt.Println("Write: " + err.Error())
45 //            return
46 //        }
47     }
48 }
49
50
51 func main() {
52   ln, err := net.Listen("unix", "/tmp/test.sock")
53   if err != nil {
54     fmt.Printf("Error: %s\n",err.Error())
55     return
56   }
57   fmt.Printf("Listener started\n")
58   for {
59     conn, err := ln.Accept()
60     if err != nil {
61       // handle error
62       continue
63     }
64     go handleConnection(conn)
65   }
66 }