mirror of
https://github.com/v2fly/v2ray-core.git
synced 2025-01-02 23:47:07 -05:00
(Sync Commit)
This commit is contained in:
parent
43abfc9463
commit
8e5063dedf
@ -23,7 +23,10 @@ type UnixInboundHandler struct {
|
|||||||
func (uih *UnixInboundHandler) Start() {
|
func (uih *UnixInboundHandler) Start() {
|
||||||
var err error
|
var err error
|
||||||
uih.listenerHolder, err = domainsocket.ListenDS(uih.ctx, uih.path)
|
uih.listenerHolder, err = domainsocket.ListenDS(uih.ctx, uih.path)
|
||||||
newError(err).AtError().WriteToLog()
|
if err != nil {
|
||||||
|
newError(err).AtError().WriteToLog()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
func (uih *UnixInboundHandler) Close() {
|
func (uih *UnixInboundHandler) Close() {
|
||||||
if uih.listenerHolder != nil {
|
if uih.listenerHolder != nil {
|
||||||
|
@ -3,24 +3,75 @@ package domainsocket
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"net"
|
"net"
|
||||||
|
"os"
|
||||||
|
"syscall"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Listener struct {
|
type Listener struct {
|
||||||
ln net.Listener
|
ln net.Listener
|
||||||
|
listenerChan <-chan net.Conn
|
||||||
|
ctx context.Context
|
||||||
|
path string
|
||||||
|
lockfile os.File
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListenDS(ctx context.Context, path string) (*Listener, error) {
|
func ListenDS(ctx context.Context, path string) (*Listener, error) {
|
||||||
addr := new(net.UnixAddr)
|
|
||||||
addr.Name = path
|
vln := &Listener{path: path}
|
||||||
addr.Net = "unix"
|
|
||||||
li, err := net.ListenUnix("unix", addr)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
vln := &Listener{ln: li}
|
|
||||||
return vln, nil
|
return vln, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ls *Listener) Down() {
|
func (ls *Listener) Down() error {
|
||||||
ls.ln.Close()
|
err := ls.ln.Close()
|
||||||
|
if err != nil {
|
||||||
|
newError(err).AtDebug().WriteToLog()
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Setup systen level Listener
|
||||||
|
func (ls *Listener) LowerUP() error {
|
||||||
|
|
||||||
|
if isUnixDomainSocketFileSystemBased(ls.path) && !___DEBUG_IGNORE_FLOCK {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
addr := new(net.UnixAddr)
|
||||||
|
addr.Name = ls.path
|
||||||
|
addr.Net = "unix"
|
||||||
|
li, err := net.ListenUnix("unix", addr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func isUnixDomainSocketFileSystemBased(path string) bool {
|
||||||
|
//No Branching
|
||||||
|
return path[0] != 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func AcquireLock(lockfilepath string) (*os.File, error) {
|
||||||
|
f, err := os.Create(lockfilepath)
|
||||||
|
if err != nil {
|
||||||
|
newError(err).AtDebug().WriteToLog()
|
||||||
|
return f, err
|
||||||
|
}
|
||||||
|
err = syscall.Flock(int(f.Fd()), syscall.LOCK_EX)
|
||||||
|
if err != nil {
|
||||||
|
newError(err).AtDebug().WriteToLog()
|
||||||
|
err = f.Close()
|
||||||
|
if err != nil {
|
||||||
|
if ___DEBUG_PANIC_WHEN_ENCOUNTED_IMPOSSIBLE_ERROR {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
newError(err).AtDebug().WriteToLog()
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//DEBUG CONSTS
|
||||||
|
const ___DEBUG_IGNORE_FLOCK = false
|
||||||
|
const ___DEBUG_PANIC_WHEN_ERROR_UNPROPAGATEABLE = false
|
||||||
|
const ___DEBUG_PANIC_WHEN_ENCOUNTED_IMPOSSIBLE_ERROR = false
|
||||||
|
Loading…
Reference in New Issue
Block a user