Skip to content

Instantly share code, notes, and snippets.

@fffaraz
Created July 22, 2016 20:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fffaraz/3d9d9a973c5591f24aa43209c3a3afe2 to your computer and use it in GitHub Desktop.
Save fffaraz/3d9d9a973c5591f24aa43209c3a3afe2 to your computer and use it in GitHub Desktop.
go tcp server
package main
import (
"io"
"log"
"net"
"os"
"runtime"
)
func handleConnection(conn net.Conn) {
defer conn.Close()
b := make([]byte, 100)
for {
_, err := conn.Read(b)
if err == io.EOF {
return
}
if containsDoubleLnRf(b) {
break
}
}
conn.Write([]byte("HTTP/1.1 200 OK\n"))
}
func containsDoubleLnRf(b []byte) bool {
for i := 0; i < len(b)-3; i++ {
if b[i] == 13 && b[i+1] == 10 && b[i+2] == 13 && b[i+3] == 10 {
return true
}
}
return false
}
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
ln, err := net.Listen("tcp", ":8080")
if err != nil {
log.Printf("Error starting server: %s", err)
os.Exit(1)
}
for {
conn, err := ln.Accept()
if err != nil {
log.Printf("Could not accept connection: %s", err)
continue
}
go handleConnection(conn)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment