UDPSocket (クラス)
public UDPSocket {inherits NetworkSocket, SocketEventTarget}
パッケージ: CURL.IO.SOCKET

UDP パケットの送受信のためのクラス。

プログラミング注意事項

1 つ作成し、オプションでそれに UDPSocket.bind を実行し、UDPSocket.read-packet または UDPSocket.write-packet を実行します。

コンストラクタ
default:UDPSocket を初期化します。
コンストラクタ public {UDPSocket.default
local-address:#SocketInetAddress = null,
local-port:uint16 = NetworkSocket.random-port,
local-name:#String = null,
local-port-name:#String = null,
remote-address:#SocketInetAddress = null,
remote-port:uint16 = NetworkSocket.random-port,
remote-name:#String = null,
remote-port-name:#String = null,
timeout:Time = Socket.infinite-timeout,
reuse-address?:bool = false,
readable-handler:#EventHandler = null
}

プロパティ
broadcast?:この UDPSocket ではブロードキャスト パケット (UDPSocket.write-packet{SocketInetAddress SocketInetAddress.broadcast} のアドレスに送信されるパケット) の送信が有効になっているかどうかを示します。
アクセサ public UDPSocket.broadcast?:bool
セッター public UDPSocket.broadcast?:bool
event-enabled?:self のイベントがモニタされる準備ができている場合は true を返します。
アクセサ public UDPSocket.event-enabled?:bool
max-packet-size:この UDPSocket で読み書きできる最大パケット サイズ。
アクセサ public UDPSocket.max-packet-size:int
receive-buffer-size:データを受け取る OS バッファのサイズ。
アクセサ public UDPSocket.receive-buffer-size:int
セッター public UDPSocket.receive-buffer-size:int
send-buffer-size:データを送信する OS バッファのサイズ。
アクセサ public UDPSocket.send-buffer-size:int
セッター public UDPSocket.send-buffer-size:int
プロパティ 継承 NetworkSocket: _local-port, local-address, local-port, open?, reuse-address?, timeout
プロパティ 継承 DefaultIOEventTarget: doing-event-dispatch?, handlers, saved-event-classes, saved-event-classes-valid?, soonest-expiration
プロパティ 継承 EventTarget: event-handlers

メソッド
add-event-handler:指定された型の IOEventEventHandler を追加または変更します (非タイムアウト クラスのみ。タイムアウト イベントには IOEventTarget.add-timeout-event-handler を使用します)。
public {UDPSocket.add-event-handler event-handler:EventHandler}:void
add-timeout-event-handler:IOTimeoutEvent の特定のサブタイプの EventHandler を追加または変更します。
public {UDPSocket.add-timeout-event-handler
event-handler:EventHandler,
timeout:Time
}:void
async-read-packet:UDP パケットの着信を非同期で読み込み、パケットが読み込まれた後や失敗やタイムアウトで AsyncReadPacketSocketEventEventHandler へ伝えます。
public {UDPSocket.async-read-packet
out:#{Array-of byte} = null,
n:int = self.max-packet-size,
timeout:Time = self.timeout,
packet-count:int = -1,
event-handler:EventHandler,
...:EventHandler
}:AsyncWorker
async-write-packet:パケットを非同期で書き込み、書き込みが完了したり、失敗したり、タイムアウトした場合 AsyncWritePacketSocketEvent を送ります。
public {UDPSocket.async-write-packet
data:{Array-of byte},
start:int = 0,
n:int = data.size - start,
remote-address:#SocketInetAddress = self._remote-address,
remote-port:uint16 = self._remote-port,
remote-name:#String = null,
remote-port-name:#String = null,
timeout:Time = self.timeout,
event-handler:EventHandler,
...:EventHandler
}:AsyncWorker
bind:ローカル アドレスおよびポートにバインドします。パラメータは UDPSocket.default またはこの呼び出しで設定できます。
public {UDPSocket.bind
local-address:#SocketInetAddress = self._local-address,
local-port:uint16 = self._local-port,
local-name:#String = null,
local-port-name:#String = null,
reuse-address?:bool = self.reuse-address?,
readable-handler:#EventHandler = null
}:void
call-handler:これは、関連するハンドラを実際に呼び出すために呼び出されます。
protected {UDPSocket.call-handler
event:IOEvent,
event-handler:EventHandler,
event-target:IOEventTarget,
now:#DateTimeData = null
}:void
close:ソケットを閉じます。
public inline {UDPSocket.close}:void
read-packet:パケットを読み取ります。remote-address および remote-portUDPSocket.default で、またはその後の任意の時点で設定された場合は、それらに必ず一致するようにフィルタリングされます。
public {UDPSocket.read-packet
out:#{Array-of byte} = null,
start:int = 0,
n:int = self.max-packet-size,
timeout:Time = self.timeout
}:(out:#{Array-of byte}, length:int, remote-address:#SocketInetAddress, remote-port:uint16)
set-remote-name:リモート アドレスを名前で検索して設定して、パケットの送信先であり着信パケットのフィルタリングの対象となる既定のリモート アドレスを設定します。
public inline {UDPSocket.set-remote-name remote-name:#String}:void
set-remote-port-name:名前の検索によってリモート ポートを設定して、パケットの送信先であり着信パケットのフィルタリングの対象となる既定のリモート ポートを設定します。
public {UDPSocket.set-remote-port-name remote-port-name:String}:void
write-packet:パケットを書き込みます。
public {UDPSocket.write-packet
data:{Array-of byte},
start:int = 0,
n:int = data.size - start,
remote-address:#SocketInetAddress = self._remote-address,
remote-port:uint16 = self._remote-port,
remote-name:#String = null,
remote-port-name:#String = null,
timeout:Time = self.timeout
}:bool
メソッド 継承 NetworkSocket: load-local-address-port
メソッド 継承 SocketEventTarget: handlers-resize, private-add-event-handler
メソッド 継承 DefaultIOEventTarget: add-targeted-event-handler, begin-event-enabled, begin-using-handlers, end-event-enabled, end-using-handlers, enqueue-timeout, event-handler-present?, handle-event, handle-event-with-now, make-IOEvent, new-handlers, remove-event-handler, remove-event-handler-by-type, remove-targeted-event-handler, remove-targeted-event-handler-by-type, reset-event-handler-expiration, verify-event
メソッド 継承 EventTarget: accepts-event-class?
メソッド 継承 BasicEventTarget: enqueue-event
メソッド 継承 Object: object-describe, object-describe-for-debugging, object-serialize



コンストラクタ詳細
default (コンストラクタ)
public {UDPSocket.default
local-address:#SocketInetAddress = null,
local-port:uint16 = NetworkSocket.random-port,
local-name:#String = null,
local-port-name:#String = null,
remote-address:#SocketInetAddress = null,
remote-port:uint16 = NetworkSocket.random-port,
remote-name:#String = null,
remote-port-name:#String = null,
timeout:Time = Socket.infinite-timeout,
reuse-address?:bool = false,
readable-handler:#EventHandler = null
}

UDPSocket を初期化します。

local-address: バインド先のローカル アドレス。ソケットは接続が確立されるときにそれ自体を適切にバインドするので、通常 local-address は必要ありません。local-address または local-name を指定すると、ソケットはそのパラメータのアドレス ファミリーで通信するように制限されます。
local-port: バインド先のローカル ポートを示す uint16 のキーワード。接続が確立されるときにそれ自体で空いているポートにバインドするので、通常は必要ありません。
local-name: バインド先のローカル アドレスを探すときに使用するホスト名を示す String のキーワード。接続が確立されるときにそれ自体を適切にバインドするので、通常は必要ありません。
local-port-name: バインド先のローカル ポートを探すときに使用するポート名を示す String のキーワード。接続が確立されるときにそれ自体を空いているポートにバインドするので、通常は必要ありません。
remote-address: パケットの送信先であり、また着信パケットのフィルタリングの対象となる既定のリモート アドレスを示す SocketInetAddress のキーワード。remote-port または remote-port-name と同様に、これか remote-name を指定できます。既定のリモート アドレスおよびポートは、初期化の後に変更できます。または、リモート アドレスおよびポートは、UDPSocket.write-packet でのパケット送信ごとに指定できます。
remote-port: パケットの送信先であり、着信パケットのフィルタリングの対象となる既定のリモート ポートを示す uint16 のキーワード。remote-name または remote-address と同様に、これか remote-port-name を指定できます。既定のリモート アドレスおよびポートは、初期化の後に変更できます。また、リモート アドレスおよびポートは、UDPSocket.write-packet でパケット送信ごとに指定できます。
remote-name: パケットの送信先である既定のリモート アドレスを探すときに使用するホスト名を示す String のキーワード。remote-port または remote-port-name と同様に、これか remote-address を指定できます。既定のリモート アドレスおよびポートは、初期化の後に変更できます。また、リモート アドレスおよびポートは、UDPSocket.write-packet でのパケット送信ごとに指定できます。
remote-port-name: パケットの送信先である既定のリモート ポートを探すときに使用するポート名を示す String のキーワード。remote-name または remote-address と同様に、これか remote-port を指定できます。既定のリモート アドレスおよびポートは、初期化の後に変更できます。また、リモート アドレスおよびポートは、UDPSocket.write-packet でのパケット送信ごとに指定できます。
timeout: タイムアウトを設定するためのキーワード。
reuse-address?: TIME_WAIT 状態にあるローカル アドレスとポート名の組み合わせの再使用を許可するかどうかを示す bool のキーワード (一部のシステムでは、他のあまり推奨できない場合での再使用も許可されている可能性があります)。既定値は false です。local-namelocal-addresslocal-port、または local-port-name が指定されている場合にのみ適用されます。
readable-handler: UDPSocket.bindUDPSocket.write-packet、または UDPSocket.read-packet を呼び出した後、利用可能な着信パケットがあり、UDPSocket.read-packet をそれをブロッキングせずに呼び出すことができるときに、自動的に呼び出される EventHandler のキーワードです (UDPSocket.read-packet は、timeout=Socket.zero-timeout オプション、またはすでに Socket.zero-timeout に設定されている既定のタイムアウトとともに呼び出されなければなりません)。既定は null です。EventHandler の作成については、on を参照してください。



プロパティ詳細
broadcast? (アクセサ)
アクセサ public UDPSocket.broadcast?:bool
セッター public UDPSocket.broadcast?:bool

この UDPSocket ではブロードキャスト パケット (UDPSocket.write-packet{SocketInetAddress SocketInetAddress.broadcast} のアドレスに送信されるパケット) の送信が有効になっているかどうかを示します。

注意事項

この既定値は false です。また、一部の OS では、何らかの管理特権なしにこれを有効にすることは許可されない可能性があります。


event-enabled? (アクセサ)
アクセサ public UDPSocket.event-enabled?:bool

self のイベントがモニタされる準備ができている場合は true を返します。

注意事項

IOEventTarget コードによってのみ呼び出されます。


max-packet-size (アクセサ)
アクセサ public UDPSocket.max-packet-size:int

この UDPSocket で読み書きできる最大パケット サイズ。



receive-buffer-size (アクセサ)
アクセサ public UDPSocket.receive-buffer-size:int
セッター public UDPSocket.receive-buffer-size:int

データを受け取る OS バッファのサイズ。

注意事項

データの受信速度と、接続での read 呼び出しがブロックする回数に影響します。送信できるデータのサイズまたは量には影響しません。OS が指定されたサイズを受け取らない場合もあります。


send-buffer-size (アクセサ)
アクセサ public UDPSocket.send-buffer-size:int
セッター public UDPSocket.send-buffer-size:int

データを送信する OS バッファのサイズ。

注意事項

データの送信速度と、接続での送信がブロックする回数に影響します。送信できるデータのサイズまたは量には影響しません。OS が指定されたサイズを受け取らない場合もあります。





メソッド詳細
add-event-handler (メソッド)
public {UDPSocket.add-event-handler event-handler:EventHandler}:void

指定された型の IOEventEventHandler を追加または変更します (非タイムアウト クラスのみ。タイムアウト イベントには IOEventTarget.add-timeout-event-handler を使用します)。

event-handler: イベントまたはタイムアウトが発生したときに呼び出されるルーチンを持つ EventHandler。呼び出し側は、呼び出しで EventHandler を作成できます。

戻り値

追加された EventHandler。このハンドラを追加して削除する場合、呼び出し側が別にオブジェクトを作成しなくてすむようにこの戻り値を保存できます。

オーバーライド

これは、DefaultIOEventTarget.handlers を使用します。


add-timeout-event-handler (メソッド)
public {UDPSocket.add-timeout-event-handler
event-handler:EventHandler,
timeout:Time
}:void

IOTimeoutEvent の特定のサブタイプの EventHandler を追加または変更します。

event-handler: タイムアウト イベントが発生したときに呼び出されるルーチンを備えた EventHandler。呼び出し側は、呼び出しで EventHandler を作成できます。
timeout: このハンドラを呼び出す前に、アクティビティが発生せずに経過するタイムアウト期間の Time

戻り値

追加された EventHandler。このハンドラを追加して削除する場合、呼び出し側が別にオブジェクトを作成しなくてすむようにこの戻り値を保存できます。

オーバーライド

これは、DefaultIOEventTarget.handlers を使用します。


async-read-packet (メソッド)
public {UDPSocket.async-read-packet
out:#{Array-of byte} = null,
n:int = self.max-packet-size,
timeout:Time = self.timeout,
packet-count:int = -1,
event-handler:EventHandler,
...:EventHandler
}:AsyncWorker

UDP パケットの着信を非同期で読み込み、パケットが読み込まれた後や失敗やタイムアウトで AsyncReadPacketSocketEventEventHandler へ伝えます。

timeout: 読み込みなしにこの時間が経過した場合、イベントが送られ、それ以上の読み込みは行われません。
out: 設定された場合、このバッファは各イベントで再利用されます。
n: 読み取る最大バイト数。既定値は UDPSocket.max-packet-size です。これは、このソケットで可能な最大パケット サイズです。なお、着信パケットのサイズよりも小さい数が指定された場合、パケットは読み取り時に切り詰められます。エラーが発生するかどうかは、基礎となる OS に依存するのでわかりません。
packet-count: この async-read-packet 呼び出しで読み込まれるパケット接続の数です。既定は -1 ですが、これは永遠にパケット読み込み続けること、または失敗やタイムアウトが発生するまで読み込み続けることを意味しています。
event-handler: AsyncReadPacketSocketEvent を受け取る EventHandler。少なくとも 1 つを指定する必要があります。
...: AsyncReadPacketSocketEvent を受け取るオプションの EventHandler

プログラミング注意事項

readable-handler は、設定されたUDPSocket で使用されるので、同時にこれを使用すべきではありません。
導入: バージョン 6.0


async-write-packet (メソッド)
public {UDPSocket.async-write-packet
data:{Array-of byte},
start:int = 0,
n:int = data.size - start,
remote-address:#SocketInetAddress = self._remote-address,
remote-port:uint16 = self._remote-port,
remote-name:#String = null,
remote-port-name:#String = null,
timeout:Time = self.timeout,
event-handler:EventHandler,
...:EventHandler
}:AsyncWorker

パケットを非同期で書き込み、書き込みが完了したり、失敗したり、タイムアウトした場合 AsyncWritePacketSocketEvent を送ります。

event-handler: AsyncWritePacketSocketEvent を受け取る EventHandler。少なくとも 1 つを指定する必要があります。
...: AsyncWritePacketSocketEvent を受け取るオプションの EventHandler

注意事項

EventHandler を除く全てのパラメータは UDPSocket.write-packet と同じ意味になります。
導入: バージョン 6.0


bind (メソッド)
public {UDPSocket.bind
local-address:#SocketInetAddress = self._local-address,
local-port:uint16 = self._local-port,
local-name:#String = null,
local-port-name:#String = null,
reuse-address?:bool = self.reuse-address?,
readable-handler:#EventHandler = null
}:void

ローカル アドレスおよびポートにバインドします。パラメータは UDPSocket.default またはこの呼び出しで設定できます。

プログラミング注意事項

これを呼び出す場合は、UDPSocket.write-packet および UDPSocket.read-packet の前に呼び出す必要があります。呼び出しできるのは 1 回だけです。特定のローカル ポートまたはアドレスをバインドする必要がある場合、または最初のパケットを送信する前にランダム ローカル ポートであることを通知する必要がある場合にだけ、呼び出しが必要です。
local-address: バインド先のローカル アドレス。ソケットは接続が確立されるときにそれ自体を適切にバインドするので、通常 local-address は必要ありません。local-address または local-name を指定すると、ソケットはそのパラメータのアドレス ファミリーで通信するように制限されます。
local-port: バインド先のローカル ポートを示す uint16 のキーワード。クライアントは、この AcceptorTCPSocket に達するには、同じポートを指定する必要があります。
local-name: バインド先のローカル アドレスを探すときに使用するホスト名を示す String のキーワード。既定で任意のローカル アドレスでの接続が許可されるので、通常は必要ありません。
local-port-name: バインド先のローカル ポートを探すときに使用するポートの名前を示す String のキーワード。
reuse-address?: TIME_WAIT 状態にあるローカル アドレスとポート名の組み合わせの再使用を許可するかどうかを示す bool のキーワード (一部のシステムでは、他のあまり推奨できない場合での再使用も許可されている可能性があります)。既定値は false です。
readable-handler: UDPSocket.bindUDPSocket.write-packet、または UDPSocket.read-packet を呼び出した後、利用可能な着信パケットがあり、UDPSocket.read-packet をそれをブロッキングせずに呼び出すことができるときに、自動的に呼び出される EventHandler のキーワードです (UDPSocket.read-packet は、timeout=Socket.zero-timeout オプション、またはすでに Socket.zero-timeout に設定されている既定のタイムアウトとともに呼び出されなければなりません)。既定は null です。EventHandler の作成については、on を参照してください。


call-handler (メソッド)
protected {UDPSocket.call-handler
event:IOEvent,
event-handler:EventHandler,
event-target:IOEventTarget,
now:#DateTimeData = null
}:void

これは、関連するハンドラを実際に呼び出すために呼び出されます。

プログラミング注意事項

IOEventTarget.handle-event および DefaultIOEventTarget.enqueue-timeout によって呼び出されます。

オーバーライド

サブクラスが呼び出しを抑止する必要がある場合にはオーバーライドできますが、オーバーライド側はその呼び出しが抑止されない場合にさらに super.call-handler を呼び出す必要があります。


close (メソッド)
public inline {UDPSocket.close}:void

ソケットを閉じます。

プログラミング注意事項

呼び出し側では、この呼び出しの後で Socket を何かに使用することはできません。SocketEventHandler を持つ場合、これらは close によって削除または無効にされます。Socket の状態は、close の呼び出し後にクリアされます。


read-packet (メソッド)
public {UDPSocket.read-packet
out:#{Array-of byte} = null,
start:int = 0,
n:int = self.max-packet-size,
timeout:Time = self.timeout
}:(out:#{Array-of byte}, length:int, remote-address:#SocketInetAddress, remote-port:uint16)

パケットを読み取ります。remote-address および remote-portUDPSocket.default で、またはその後の任意の時点で設定された場合は、それらに必ず一致するようにフィルタリングされます。

out: パケットのバイトの読み出し先となる {Array-of byte} キーワード。指定されない場合は作成され、いずれの場合もそれが返されます。
start: パケットの out での開始バイトのインデックスを示す int キーワード。既定値は 0 です。
n: 読み取る最大バイト数。既定値は UDPSocket.max-packet-size です。これは、このソケットで可能な最大パケット サイズです。なお、着信パケットのサイズよりも小さい数が指定された場合、パケットは読み取り時に切り詰められます。エラーが発生するかどうかは、基礎となる OS に依存するのでわかりません。
timeout: クラスにすでに格納されている値が適切でない場合に使用されるタイムアウトの Time キーワード。

戻り値

読み取りに成功した場合は、out として、パケット データを格納した {Array-of byte} を返します。length として、読み取ったパケットの長さを示す int を返します。読み取りに失敗した場合は 0 を返します。remote-address として、パケットの送信元のアドレスの SocketInetAddress を返します。remote-port として、パケットの送信元のポートの uint16 を返します。


set-remote-name (メソッド)
public inline {UDPSocket.set-remote-name remote-name:#String}:void

リモート アドレスを名前で検索して設定して、パケットの送信先であり着信パケットのフィルタリングの対象となる既定のリモート アドレスを設定します。

remote-name: パケットの送信先のリモート アドレスを探すために検索するホスト名を示す String のキーワード。


set-remote-port-name (メソッド)
public {UDPSocket.set-remote-port-name remote-port-name:String}:void

名前の検索によってリモート ポートを設定して、パケットの送信先であり着信パケットのフィルタリングの対象となる既定のリモート ポートを設定します。

remote-port-name: パケットの送信先であるリモート ポートを探すために検索するポート名を示す String のキーワード。


write-packet (メソッド)
public {UDPSocket.write-packet
data:{Array-of byte},
start:int = 0,
n:int = data.size - start,
remote-address:#SocketInetAddress = self._remote-address,
remote-port:uint16 = self._remote-port,
remote-name:#String = null,
remote-port-name:#String = null,
timeout:Time = self.timeout
}:bool

パケットを書き込みます。

data: パケットで送信するバイト数。
start: パケットの data の開始バイトのインデックスを示す int のキーワード。既定値は 0
n: 送信するバイト数。既定値は、data のサイズから start を引いた大きさです。また、UDPSocket.max-packet-size の最大値があるのでエラーが発生する可能性があります。このサイズを超えるものを送信しようとしても何も送信されない可能性があります。
remote-address: どのアドレスへパケットを送るかを示す SocketInetAddress キーワードです。remote-addressremote-nameinit や後の設定で設定されている場合、前に設定した値が使用される限りこれは設定される必要がありません。
remote-port: パケットの送信先のポートを示す uint16 キーワード。remote-port または remote-port-nameinit で提供されているか、後で設定されている場合は、前に設定した値を使用してはならない場合を除いて、新たに指定する必要はありません。このキーワードは remote-port-name と相互に排他的です。
remote-name: パケットの送信先のリモート アドレスを探すために検索するホスト名を示す String のキーワード。remote-address または remote-nameinit で提供されているか、後で設定されている場合は、前に設定した値を使用してはならない場合を除いて、新たに指定する必要はありません。
remote-port-name: パケットの送信先のリモート ポートを探すために検索するポートの名前を示す String キーワード。remote-port または remote-port-nameinit で提供されているか、後で設定されている場合は、前に設定した値を使用してはならない場合を除いて、新たに指定する必要はありません。このキーワードは、remote-port と相互に排他的です。
timeout: クラスにすでに格納されている値が適切でない場合に使用されるタイムアウトの Time キーワード。

戻り値

パケットの送信に成功したかどうかを通知する bool を返します。