github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/net/udpsock.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/net/netip"
     9  	"github.com/shogo82148/std/syscall"
    10  )
    11  
    12  // UDPAddrはUDPエンドポイントのアドレスを表します。
    13  type UDPAddr struct {
    14  	IP   IP
    15  	Port int
    16  	Zone string
    17  }
    18  
    19  // AddrPortはUDPAddr aをnetip.AddrPortとして返します。
    20  //
    21  // もしa.Portがuint16に収まらない場合、静かに切り捨てられます。
    22  //
    23  // もしaがnilの場合、ゼロ値が返されます。
    24  func (a *UDPAddr) AddrPort() netip.AddrPort
    25  
    26  // Networkはアドレスのネットワーク名、"udp"を返します。
    27  func (a *UDPAddr) Network() string
    28  
    29  func (a *UDPAddr) String() string
    30  
    31  // ResolveUDPAddr はUDPのエンドポイントのアドレスを返します。
    32  //
    33  // ネットワークはUDPのネットワーク名である必要があります。
    34  //
    35  // アドレスパラメータのホストがIPアドレスのリテラルでない場合、または
    36  // ポート番号がリテラルのポート番号でない場合、ResolveUDPAddrは
    37  // UDPエンドポイントのアドレスに解決します。
    38  // それ以外の場合は、アドレスをリテラルのIPアドレスとポート番号のペアとして解析します。
    39  // アドレスパラメータはホスト名を使用することもできますが、これは
    40  // 推奨されません。なぜなら、ホスト名のIPアドレスのいずれか一つしか返さないからです。
    41  //
    42  // ネットワークおよびアドレスパラメータの説明については、func Dialを参照してください。
    43  func ResolveUDPAddr(network, address string) (*UDPAddr, error)
    44  
    45  // UDPAddrFromAddrPortはaddrをUDPAddrとして返します。もしaddr.IsValid()がfalseであれば、返されるUDPAddrにはnilのIPフィールドが含まれ、アドレスファミリーに依存しない未指定のアドレスを示します。
    46  func UDPAddrFromAddrPort(addr netip.AddrPort) *UDPAddr
    47  
    48  // UDPConnはUDPネットワーク接続のConnおよびPacketConnインターフェースの実装です。
    49  type UDPConn struct {
    50  	conn
    51  }
    52  
    53  // SyscallConnは生のネットワーク接続を返します。
    54  // これはsyscall.Connインターフェースを実装しています。
    55  func (c *UDPConn) SyscallConn() (syscall.RawConn, error)
    56  
    57  // ReadFromUDPはReadFromと同様の動作をしますが、UDPAddrを返します。
    58  func (c *UDPConn) ReadFromUDP(b []byte) (n int, addr *UDPAddr, err error)
    59  
    60  // ReadFrom は PacketConn の ReadFrom メソッドを実装します。
    61  func (c *UDPConn) ReadFrom(b []byte) (int, Addr, error)
    62  
    63  // ReadFromUDPAddrPortはReadFromと同様の機能を提供しますが、netip.AddrPortを返します。
    64  //
    65  // cが指定されていないアドレスにバインドされている場合、返される
    66  // netip.AddrPortのアドレスは、IPv4-mapped IPv6アドレスの可能性があります。
    67  // IPv6のプレフィックスなしのアドレスを取得するには、netip.Addr.Unmapを使用してください。
    68  func (c *UDPConn) ReadFromUDPAddrPort(b []byte) (n int, addr netip.AddrPort, err error)
    69  
    70  // ReadMsgUDPは、cからメッセージを読み込み、ペイロードをbにコピーし、サイドバンドデータをoobにコピーします。bにコピーされたバイト数、oobにコピーされたバイト数、メッセージに設定されたフラグ、およびメッセージのソースアドレスを返します。
    71  //
    72  // パッケージgolang.org/x/net/ipv4およびgolang.org/x/net/ipv6は、oob内のIPレベルのソケットオプションを操作するために使用できます。
    73  func (c *UDPConn) ReadMsgUDP(b, oob []byte) (n, oobn, flags int, addr *UDPAddr, err error)
    74  
    75  // ReadMsgUDPAddrPortは、UDPAddrではなくnetip.AddrPortを返すReadMsgUDPと同様の機能です。
    76  func (c *UDPConn) ReadMsgUDPAddrPort(b, oob []byte) (n, oobn, flags int, addr netip.AddrPort, err error)
    77  
    78  // WriteToUDPはWriteToと同様の動作をしますが、UDPAddrを引数に取ります。
    79  func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (int, error)
    80  
    81  // WriteToUDPAddrPortは、WriteToと同様に動作しますが、netip.AddrPortを受け取ります。
    82  func (c *UDPConn) WriteToUDPAddrPort(b []byte, addr netip.AddrPort) (int, error)
    83  
    84  // WriteToはPacketConnのWriteToメソッドを実装します。
    85  func (c *UDPConn) WriteTo(b []byte, addr Addr) (int, error)
    86  
    87  // WriteMsgUDPは、cが接続されていない場合はcを介してaddrにメッセージを書き込み、
    88  // cが接続されている場合はcのリモートアドレスにメッセージを書き込みます(その場合、
    89  // addrはnilでなければなりません)。ペイロードはbからコピーされ、関連する
    90  // フラグデータはoobからコピーされます。ペイロードとフラグデータの書き込まれた
    91  // バイト数を返します。
    92  //
    93  // パッケージgolang.org/x/net/ipv4およびgolang.org/x/net/ipv6を使用して、
    94  // oob内のIPレベルのソケットオプションを操作することができます。
    95  func (c *UDPConn) WriteMsgUDP(b, oob []byte, addr *UDPAddr) (n, oobn int, err error)
    96  
    97  // WriteMsgUDPAddrPortはUDPAddrではなく、netip.AddrPortを受け取るWriteMsgUDPと同様のものです。
    98  func (c *UDPConn) WriteMsgUDPAddrPort(b, oob []byte, addr netip.AddrPort) (n, oobn int, err error)
    99  
   100  // DialUDPはUDPネットワークのためにDialと同様の機能を提供します。
   101  //
   102  // ネットワークはUDPネットワークの名前でなければならず、詳細についてはfunc Dialを参照してください。
   103  //
   104  // もしladdrがnilの場合、自動的にローカルアドレスが選択されます。
   105  // もしraddrのIPフィールドがnilまたは未指定のIPアドレスの場合、ローカルシステムが仮定されます。
   106  func DialUDP(network string, laddr, raddr *UDPAddr) (*UDPConn, error)
   107  
   108  // ListenUDPは、UDPネットワークに対してListenPacketと同様の機能を提供します。
   109  //
   110  // ネットワークはUDPネットワーク名でなければなりません。詳細については、func Dialを参照してください。
   111  //
   112  // laddrのIPフィールドがnilまたは未指定のIPアドレスである場合、
   113  // ListenUDPは、マルチキャストIPアドレスを除く、ローカルシステムのすべての利用可能なIPアドレスでリスンします。
   114  // laddrのPortフィールドが0の場合、ポート番号が自動的に選択されます。
   115  func ListenUDP(network string, laddr *UDPAddr) (*UDPConn, error)
   116  
   117  // ListenMulticastUDPは、グループアドレスを指定したネットワークインターフェース上でのUDPネットワーク用のListenPacketのように動作します。
   118  // ネットワークはUDPネットワーク名である必要があります。詳細については、func Dialを参照してください。
   119  // ListenMulticastUDPは、グループのマルチキャストIPアドレスを含む、ローカルシステムの利用可能なすべてのIPアドレスでリッスンします。
   120  // ifiがnilの場合、ListenMulticastUDPはシステムが割り当てたマルチキャストインターフェースを使用しますが、これは推奨されません。割り当てはプラットフォームに依存し、時にはルーティングの設定が必要になる場合があります。
   121  // gaddrのPortフィールドが0の場合、ポート番号が自動的に選択されます。
   122  // ListenMulticastUDPは、単純で小規模なアプリケーションのための便利さのために提供されています。一般的な目的にはgolang.org/x/net/ipv4とgolang.org/x/net/ipv6パッケージがあります。
   123  // ListenMulticastUDPは、IPPROTO_IPのIP_MULTICAST_LOOPソケットオプションを0に設定して、マルチキャストパケットのループバックを無効にします。
   124  func ListenMulticastUDP(network string, ifi *Interface, gaddr *UDPAddr) (*UDPConn, error)