blob: ae0956958f3655a0781aa614ad1b77876e72e372 [file] [log] [blame]
Russ Cox35ace1d2009-11-01 11:15:34 -08001// Copyright 2009 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// Unix domain sockets
6
7package net
8
Russ Coxc83b8382009-11-02 18:37:30 -08009// UnixAddr represents the address of a Unix domain socket end point.
10type UnixAddr struct {
Albert Strasheim01fad6a2011-01-19 14:21:58 -050011 Name string
12 Net string
Russ Coxc83b8382009-11-02 18:37:30 -080013}
14
Russ Coxc83b8382009-11-02 18:37:30 -080015// Network returns the address's network name, "unix" or "unixgram".
16func (a *UnixAddr) Network() string {
Albert Strasheim01fad6a2011-01-19 14:21:58 -050017 return a.Net
Russ Coxc83b8382009-11-02 18:37:30 -080018}
19
20func (a *UnixAddr) String() string {
21 if a == nil {
Robert Griesemer40621d52009-11-09 12:07:39 -080022 return "<nil>"
Russ Coxc83b8382009-11-02 18:37:30 -080023 }
Robert Griesemera3d10452009-12-15 15:35:38 -080024 return a.Name
Russ Coxc83b8382009-11-02 18:37:30 -080025}
26
27func (a *UnixAddr) toAddr() Addr {
Robert Griesemera3d10452009-12-15 15:35:38 -080028 if a == nil { // nil *UnixAddr
29 return nil // nil interface
Russ Coxc83b8382009-11-02 18:37:30 -080030 }
Robert Griesemera3d10452009-12-15 15:35:38 -080031 return a
Russ Coxc83b8382009-11-02 18:37:30 -080032}
33
34// ResolveUnixAddr parses addr as a Unix domain socket address.
Albert Strasheim01fad6a2011-01-19 14:21:58 -050035// The string net gives the network name, "unix", "unixgram" or
36// "unixpacket".
Russ Coxeb692922011-11-01 22:05:34 -040037func ResolveUnixAddr(net, addr string) (*UnixAddr, error) {
Russ Coxc83b8382009-11-02 18:37:30 -080038 switch net {
39 case "unix":
Albert Strasheim01fad6a2011-01-19 14:21:58 -050040 case "unixpacket":
Russ Coxc83b8382009-11-02 18:37:30 -080041 case "unixgram":
Russ Coxc83b8382009-11-02 18:37:30 -080042 default:
Robert Griesemer40621d52009-11-09 12:07:39 -080043 return nil, UnknownNetworkError(net)
Russ Coxc83b8382009-11-02 18:37:30 -080044 }
Albert Strasheim01fad6a2011-01-19 14:21:58 -050045 return &UnixAddr{addr, net}, nil
Russ Coxc83b8382009-11-02 18:37:30 -080046}