12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- // +build linux
- package server
- import (
- "fmt"
- "net/http"
- "os"
- "syscall"
- "github.com/docker/docker/engine"
- )
- // NewServer sets up the required Server and does protocol specific checking.
- func NewServer(proto, addr string, job *engine.Job) (Server, error) {
- // Basic error and sanity checking
- switch proto {
- case "fd":
- return nil, serveFd(addr, job)
- case "tcp":
- return setupTcpHttp(addr, job)
- case "unix":
- return setupUnixHttp(addr, job)
- default:
- return nil, fmt.Errorf("Invalid protocol format.")
- }
- }
- func setupUnixHttp(addr string, job *engine.Job) (*HttpServer, error) {
- r := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("Version"))
- if err := syscall.Unlink(addr); err != nil && !os.IsNotExist(err) {
- return nil, err
- }
- mask := syscall.Umask(0777)
- defer syscall.Umask(mask)
- l, err := newListener("unix", addr, job.GetenvBool("BufferRequests"))
- if err != nil {
- return nil, err
- }
- if err := setSocketGroup(addr, job.Getenv("SocketGroup")); err != nil {
- return nil, err
- }
- if err := os.Chmod(addr, 0660); err != nil {
- return nil, err
- }
- return &HttpServer{&http.Server{Addr: addr, Handler: r}, l}, nil
- }
|