github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/net/unixsock.go (about)

     1  // 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  package net
     6  
     7  import (
     8  	"github.com/shogo82148/std/os"
     9  	"github.com/shogo82148/std/sync"
    10  	"github.com/shogo82148/std/syscall"
    11  	"github.com/shogo82148/std/time"
    12  )
    13  
    14  // UnixAddrはUnixドメインソケットエンドポイントのアドレスを表します。
    15  type UnixAddr struct {
    16  	Name string
    17  	Net  string
    18  }
    19  
    20  // Networkはアドレスのネットワーク名を返します。"unix"、"unixgram"、または"unixpacket"です。
    21  func (a *UnixAddr) Network() string
    22  
    23  func (a *UnixAddr) String() string
    24  
    25  // ResolveUnixAddrは、Unixドメインソケットエンドポイントのアドレスを返します。
    26  //
    27  // ネットワークはUnixのネットワーク名である必要があります。
    28  //
    29  // ネットワークとアドレスのパラメータについての説明は、
    30  // [Dial] 関数を参照してください。
    31  func ResolveUnixAddr(network, address string) (*UnixAddr, error)
    32  
    33  // UnixConnは、Unixドメインソケットへの接続のための [Conn] インターフェースの実装です。
    34  type UnixConn struct {
    35  	conn
    36  }
    37  
    38  // SyscallConnは生のネットワーク接続を返します。
    39  // これは [syscall.Conn] インターフェースを実装しています。
    40  func (c *UnixConn) SyscallConn() (syscall.RawConn, error)
    41  
    42  // CloseReadは、Unixドメイン接続の読み込み側をシャットダウンします。
    43  // ほとんどの呼び出し元は、単にCloseを使用すべきです。
    44  func (c *UnixConn) CloseRead() error
    45  
    46  // CloseWriteはUnixドメイン接続の書き込み側をシャットダウンします。
    47  // ほとんどの呼び出し元は、単にCloseを使用するだけで十分です。
    48  func (c *UnixConn) CloseWrite() error
    49  
    50  // ReadFromUnixは、[UnixConn.ReadFrom] と同様に動作しますが、[UnixAddr] を返します。
    51  func (c *UnixConn) ReadFromUnix(b []byte) (int, *UnixAddr, error)
    52  
    53  // ReadFromは [PacketConn] のReadFromメソッドを実装します。
    54  func (c *UnixConn) ReadFrom(b []byte) (int, Addr, error)
    55  
    56  // ReadMsgUnix はcからメッセージを読み取り、そのペイロードをbに、
    57  // 関連する帯域外データをoobにコピーします。bにコピーされたバイト数、oobに
    58  // コピーされたバイト数、メッセージに設定されたフラグ、およびメッセージの
    59  // 送信元アドレスを返します。
    60  //
    61  // なお、len(b) == 0 かつ len(oob) > 0 の場合、この関数は依然として接続から
    62  // 1バイトを読み取り(および破棄)ます。
    63  func (c *UnixConn) ReadMsgUnix(b, oob []byte) (n, oobn, flags int, addr *UnixAddr, err error)
    64  
    65  // WriteToUnixは [UnixConn.WriteTo] と同様に動作しますが、[UnixAddr] を取ります。
    66  func (c *UnixConn) WriteToUnix(b []byte, addr *UnixAddr) (int, error)
    67  
    68  // WriteToは [PacketConn] のWriteToメソッドを実装します。
    69  func (c *UnixConn) WriteTo(b []byte, addr Addr) (int, error)
    70  
    71  // WriteMsgUnixは、ペイロードのbと関連するオーバンドデータのoobから、cを介してaddrにメッセージを書き込みます。書き込まれたペイロードとオーバンドバイトの数を返します。
    72  // 注意:len(b) == 0かつlen(oob) > 0の場合、この関数は依然として接続に1バイトを書き込みます。
    73  func (c *UnixConn) WriteMsgUnix(b, oob []byte, addr *UnixAddr) (n, oobn int, err error)
    74  
    75  // DialUnixは、Unixネットワークにおける [Dial] と同様の動作をします。
    76  //
    77  // ネットワークはUnixネットワーク名でなければなりません。詳細についてはfunc Dialを参照してください。
    78  //
    79  // laddrがnilでない場合、それは接続のローカルアドレスとして使用されます。
    80  func DialUnix(network string, laddr, raddr *UnixAddr) (*UnixConn, error)
    81  
    82  // UnixListenerはUnixドメインソケットのリスナーです。クライアントは通常、Unixドメインソケットを想定せずに、[Listener] の型の変数を使用するべきです。
    83  type UnixListener struct {
    84  	fd         *netFD
    85  	path       string
    86  	unlink     bool
    87  	unlinkOnce sync.Once
    88  }
    89  
    90  // SyscallConnは、生のネットワーク接続を返します。
    91  // これは [syscall.Conn] インターフェースを実装します。
    92  //
    93  // 返されるRawConnは、Controlの呼び出しのみをサポートします。
    94  // ReadとWriteはエラーを返します。
    95  func (l *UnixListener) SyscallConn() (syscall.RawConn, error)
    96  
    97  // AcceptUnixは次の着信呼び出しを受け入れ、新しい接続を返します。
    98  func (l *UnixListener) AcceptUnix() (*UnixConn, error)
    99  
   100  // Acceptは [Listener] インターフェースのAcceptメソッドを実装します。
   101  // 返される接続は [*UnixConn] 型です。
   102  func (l *UnixListener) Accept() (Conn, error)
   103  
   104  // CloseはUnixアドレス上でのリスニングを停止します。既に受け付けた接続は閉じません。
   105  func (l *UnixListener) Close() error
   106  
   107  // Addrはリスナーのネットワークアドレスを返します。
   108  // 返されるAddrは、Addrのすべての呼び出しで共有されるため、
   109  // 変更しないでください。
   110  func (l *UnixListener) Addr() Addr
   111  
   112  // SetDeadlineはリスナーと関連付けられた締め切りを設定します。
   113  // ゼロの時間値は締め切りを無効にします。
   114  func (l *UnixListener) SetDeadline(t time.Time) error
   115  
   116  // File は基になる [os.File] のコピーを返します。
   117  // 終了時には、f を閉じるのは呼び出し元の責任です。
   118  // l を閉じても f に影響を与えず、f を閉じても l に影響を与えません。
   119  //
   120  // 返された os.File のファイルディスクリプタは、接続のものとは異なります。
   121  // この複製を使用して元のもののプロパティを変更しようとしても、望ましい効果があるかどうかはわかりません。
   122  func (l *UnixListener) File() (f *os.File, err error)
   123  
   124  // ListenUnixはUnixネットワーク向けの [Listen] のように機能します。
   125  //
   126  // ネットワークは「unix」または「unixpacket」である必要があります。
   127  func ListenUnix(network string, laddr *UnixAddr) (*UnixListener, error)
   128  
   129  // ListenUnixgramはUnixネットワーク用の [ListenPacket] のように動作します。
   130  //
   131  // ネットワークは"unixgram"である必要があります。
   132  func ListenUnixgram(network string, laddr *UnixAddr) (*UnixConn, error)