summaryrefslogtreecommitdiff
path: root/src/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/server.go')
-rw-r--r--src/server.go48
1 files changed, 32 insertions, 16 deletions
diff --git a/src/server.go b/src/server.go
index 5757e160..9f1200da 100644
--- a/src/server.go
+++ b/src/server.go
@@ -46,15 +46,20 @@ type httpServer struct {
type listenAddress struct {
host string
port int
+ sock string
}
func (addr listenAddress) IsLocal() bool {
- return addr.host == "localhost" || addr.host == "127.0.0.1"
+ return addr.host == "localhost" || addr.host == "127.0.0.1" || len(addr.sock) > 0
}
-var defaultListenAddr = listenAddress{"localhost", 0}
+var defaultListenAddr = listenAddress{"localhost", 0, ""}
func parseListenAddress(address string) (listenAddress, error) {
+ if strings.HasSuffix(address, ".sock") {
+ return listenAddress{"", 0, address}, nil
+ }
+
parts := strings.SplitN(address, ":", 3)
if len(parts) == 1 {
parts = []string{"localhost", parts[0]}
@@ -70,7 +75,7 @@ func parseListenAddress(address string) (listenAddress, error) {
if len(parts[0]) == 0 {
parts[0] = "localhost"
}
- return listenAddress{parts[0], port}, nil
+ return listenAddress{parts[0], port, ""}, nil
}
func startHttpServer(address listenAddress, actionChannel chan []*action, getHandler func(getParams) string) (net.Listener, int, error) {
@@ -80,21 +85,32 @@ func startHttpServer(address listenAddress, actionChannel chan []*action, getHan
if !address.IsLocal() && len(apiKey) == 0 {
return nil, port, errors.New("FZF_API_KEY is required to allow remote access")
}
- addrStr := fmt.Sprintf("%s:%d", host, port)
- listener, err := net.Listen("tcp", addrStr)
- if err != nil {
- return nil, port, fmt.Errorf("failed to listen on %s", addrStr)
- }
- if port == 0 {
- addr := listener.Addr().String()
- parts := strings.Split(addr, ":")
- if len(parts) < 2 {
- return nil, port, fmt.Errorf("cannot extract port: %s", addr)
+
+ var listener net.Listener
+ var err error
+ if len(address.sock) > 0 {
+ os.Remove(address.sock)
+ listener, err = net.Listen("unix", address.sock)
+ if err != nil {
+ return nil, 0, fmt.Errorf("failed to listen on %s", address.sock)
}
- var err error
- port, err = strconv.Atoi(parts[len(parts)-1])
+ } else {
+ addrStr := fmt.Sprintf("%s:%d", host, port)
+ listener, err = net.Listen("tcp", addrStr)
if err != nil {
- return nil, port, err
+ return nil, port, fmt.Errorf("failed to listen on %s", addrStr)
+ }
+ if port == 0 {
+ addr := listener.Addr().String()
+ parts := strings.Split(addr, ":")
+ if len(parts) < 2 {
+ return nil, port, fmt.Errorf("cannot extract port: %s", addr)
+ }
+ var err error
+ port, err = strconv.Atoi(parts[len(parts)-1])
+ if err != nil {
+ return nil, port, err
+ }
}
}