1
0
mirror of https://github.com/golang/go synced 2024-10-05 12:21:22 -06:00
go/src/lib/http/server.go
Cary Hull f4a8db667b Fixes breakage caused by semicolon restriction.
R=rsc
APPROVED=rsc
DELTA=50  (4 added, 0 deleted, 46 changed)
OCL=16707
CL=16725
2008-10-08 09:34:50 -07:00

66 lines
1.2 KiB
Go

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Trivial HTTP server
// TODO: Routines for writing responses.
package http
import (
"io";
"os";
"net";
"http";
"strings"
)
// Serve a new connection.
func ServeConnection(fd net.Conn, raddr string, f *(*Conn, *Request)) {
c, err := NewConn(fd);
if err != nil {
return
}
for {
req, err := c.ReadRequest();
if err != nil {
break
}
f(c, req);
if c.close {
break
}
}
c.Close();
}
// Web server: already listening on l, call f for each request.
export func Serve(l net.Listener, f *(*Conn, *Request)) *os.Error {
// TODO: Make this unnecessary
s, e := os.Getenv("GOMAXPROCS");
if n, ok := strings.atoi(s); n < 3 {
print("Warning: $GOMAXPROCS needs to be at least 3.\n");
}
for {
rw, raddr, e := l.Accept();
if e != nil {
return e
}
go ServeConnection(rw, raddr, f)
}
panic("not reached")
}
// Web server: listen on address, call f for each request.
export func ListenAndServe(addr string, f *(*Conn, *Request)) *os.Error {
l, e := net.Listen("tcp", addr);
if e != nil {
return e
}
e = Serve(l, f);
l.Close();
return e
}