Beam: change the prototype of SendPipe() to return a *net.UnixSocket

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
Upstream-commit: b637e5f04af010bd1fc6bef93b8512d587d90c46
Component: engine
This commit is contained in:
Solomon Hykes
2014-04-22 15:50:14 -07:00
parent 3a8ae6b55f
commit f4f2d42aa7
2 changed files with 14 additions and 9 deletions
+1 -5
View File
@@ -17,11 +17,7 @@ import (
// not point to a connection, that message will be skipped.
//
func Listen(conn *net.UnixConn, name string) (net.Listener, error) {
fEndpoint, err := SendPipe(conn, []byte(name))
if err != nil {
return nil, err
}
endpoint, err := FdConn(int(fEndpoint.Fd()))
endpoint, err := SendPipe(conn, []byte(name))
if err != nil {
return nil, err
}
+13 -4
View File
@@ -78,16 +78,25 @@ func Receive(conn *net.UnixConn) ([]byte, *os.File, error) {
// allows for arbitrarily complex service discovery and retry logic to take place,
// without complicating application code.
//
func SendPipe(conn *net.UnixConn, data []byte) (*os.File, error) {
func SendPipe(conn *net.UnixConn, data []byte) (endpoint *net.UnixConn, err error) {
local, remote, err := SocketPair()
if err != nil {
return nil, err
}
if err := Send(conn, data, remote); err != nil {
remote.Close()
defer func() {
if err != nil {
local.Close()
remote.Close()
}
}()
endpoint, err = FdConn(int(local.Fd()))
if err != nil {
return nil, err
}
return local, nil
if err := Send(conn, data, remote); err != nil {
return nil, err
}
return endpoint, nil
}
func receiveUnix(conn *net.UnixConn) ([]byte, []int, error) {