Commit ab01099e authored by Ricardo Galli's avatar Ricardo Galli

A simpler and perhaps faster server

parent eb6e8940
...@@ -3,52 +3,41 @@ ...@@ -3,52 +3,41 @@
package main package main
import ( import (
"net" "fmt"
"strconv" "net"
"fmt" "strconv"
) )
const PORT = 25000 const PORT = 25000
func main() { func main() {
server, err := net.Listen("tcp", ":" + strconv.Itoa(PORT)) server, err := net.Listen("tcp", ":"+strconv.Itoa(PORT))
if server == nil { if server == nil {
panic("couldn't start listening: " + err.Error())
panic("couldn't start listening: " + err.Error()) }
} i := 0
conns := clientConns(server) for {
for { client, err := server.Accept()
go handleConn(<-conns) if client == nil {
} fmt.Printf("couldn't accept: " + err.Error())
} continue
}
func clientConns(listener net.Listener) chan net.Conn { i++
ch := make(chan net.Conn) fmt.Printf("%d: %v <-> %v\n", i, client.LocalAddr(), client.RemoteAddr())
i := 0 go handleConn(client)
go func() { }
for {
client, err := listener.Accept()
if client == nil {
fmt.Printf("couldn't accept: " + err.Error())
continue
}
i++
fmt.Printf("%d: %v <-> %v\n", i, client.LocalAddr(), client.RemoteAddr())
ch <- client
}
}()
return ch
} }
func handleConn(client net.Conn) { func handleConn(client net.Conn) {
buf := make([]byte, 102400) defer client.Close()
for { buf := make([]byte, 102400)
reqLen, err := client.Read(buf) for {
if err != nil { reqLen, err := client.Read(buf)
break if err != nil {
} break
if reqLen > 0 { }
client.Write(buf[:reqLen]) if reqLen > 0 {
} client.Write(buf[:reqLen])
} }
}
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment