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)