added door daemon go
[svn42.git] / door_daemon_go / unix_socket_server.go
diff --git a/door_daemon_go/unix_socket_server.go b/door_daemon_go/unix_socket_server.go
new file mode 100644 (file)
index 0000000..aca60b8
--- /dev/null
@@ -0,0 +1,66 @@
+package main
+import "fmt"
+import "net"
+import "bufio"
+
+func handleConnection(c net.Conn) () {
+    fmt.Println("new connection")
+    var client *bufio.ReadWriter;
+    {
+      client_r := bufio.NewReaderSize(c,14)
+      client_w := bufio.NewWriterSize(c,14)
+      client = bufio.NewReadWriter(client_r,client_w)
+    }
+    for {
+          wasPrefix:=false
+          var line string
+          for isPrefix:=true;isPrefix; {
+            var lineBuf []byte 
+            var err error
+            lineBuf,isPrefix,err = client.ReadLine()
+            if err != nil {
+                fmt.Printf("Readline Error: %s\n",err.Error())
+                c.Close()
+                return
+            }
+            if isPrefix {
+              wasPrefix=true
+            } else {
+              line=string(lineBuf)
+            }
+          }
+          if wasPrefix {
+              fmt.Println("line too long")
+              fmt.Fprintf(client,"line too long\n")
+              client.Flush()
+              continue
+          }
+          fmt.Printf("Received: %v\n", string(line))
+//
+//        data := buf[0:nr]
+//        fmt.Printf("Received: %v", string(data))
+//        _, err = c.Write(data)
+//        if err != nil {
+//            fmt.Println("Write: " + err.Error())
+//            return
+//        }
+    }
+}
+
+
+func main() {
+  ln, err := net.Listen("unix", "/tmp/test.sock")
+  if err != nil {
+    fmt.Printf("Error: %s\n",err.Error())
+    return
+  }
+  fmt.Printf("Listener started\n")
+  for {
+    conn, err := ln.Accept()
+    if err != nil {
+      // handle error
+      continue
+    }
+    go handleConnection(conn)
+  }
+}