これらのソケット関数は、インターネット プロトコルと直接通信して情報を送信します。 fopensock のストリームと比較すると、比較的低いレベルで動作します。通常、これらは C 関数をカプセル化し、同様の名前を持ちます。 C でのソケット プログラミングの経験がある場合は、これらの関数を非常に快適に使用できるでしょう。ここではソケットプログラミングについては特に詳しく説明しません。
これらの関数を使用して、高レベルの関数では解決できない難しい問題を解決します。これらの関数を使用すると、fopen と同様の機能を実現できます。PHP の CLI (コマンドライン インターフェイス) を使用して実装されたインターネット デーモンなど、ソケット関数を実装する方法は数多くあります。
リソースソケット_accept(リソースソケット)
スクリプトのサーバー側で、socket_accept を使用して受信接続を受け入れます。まずソケットを作成し、名前にバインドして、ポートでリッスンするように設定する必要があります。ブロック モードでは、socket_accept は一意の承認された接続を生成します。非ブロック モードでは、接続が確立されていない場合は false を返します。さらに、新しいソケット リソースがある場合は、読み取りおよび書き込み操作を実行できます。
以下では、単純なエコー サーバーを示します。これは CLI (コマンド ライン) で実行され、ポート 12345 でクライアント接続を待機します。
ソケット受け入れ
<?php
set_time_limit(0);
//ソケットを作成する
if(($socket =socket_create(AF_INET, SOCK_STREAM, 0)) < 0){
print("ソケットを作成できませんでした: " .socket_strerror(socket_last_error()) . "n");
}
//指定されたアドレスとポートにバインドします
if(($error =socket_bind($socket, gethostbyname($_SERVER['HOSTNAME']), 12345)) < 0){
print("ソケットをバインドできませんでした: " .socket_strerror(socket_last_error()) . "n");
}
if(($error =socket_listen($socket, 5)) < 0){
print("ソケットにリストできませんでした: " .
ソケット_strerror(socket_last_error()) . "n");
}
while(TRUE){
//接続を待ちます
if(($accept =ソケット_accept($socket)) < 0){
print("読み取り中のエラー: " .socket_strerror($message) . "n");
壊す;
}
//ウェルカムメッセージを送信する
socket_write($accept, "接続が受け入れられましたn");
print(date('Ymd H:i:s') . "ステータス: 接続は受け入れられましたn");
ob_flush();
while(TRUE){
//クライアントからの行を読み取ります
if(FALSE === ($line =ソケット_読み取り($accept, 1024))){
print("ソケットから読み取れませんでした: " .
ソケット_strerror(socket_last_error()) . "n");
休憩2;
}
if( !@socket_write($accept , "ECHO: $line")){
print(date('Ymd H:i:s') . " ステータス: 接続が中断されましたn");
壊す;
}
print(date('Ymd H:i:s') . " READ: $line");
ob_flush();
}
ソケットクローズ($accept);
}
?>
boolsocket_bind(リソースソケット、文字列アドレス、整数ポート)
このsocket_bind()はソケットリソースをアドレスにバインドします。このソケットは、socket_create() 関数によって返されるリソースである必要があります。このアドレスは、IP アドレスまたは Unix ソケットへのパスである必要があります。インターネット上で実行されているソケットの場合は、ポートも指定する必要があります。
socket_clear_error(リソースソケット)
この関数は、指定されたソケットのエラーをクリアできます。パラメータが指定されていない場合は、すべてのソケット エラーがクリアされます。
socket_close(リソースソケット)
socket_close 関数はソケットを閉じ、ソケットが占有しているメモリ リソースをクリアします。
ブールソケット接続(リソースソケット、文字列アドレス、整数ポート)
この関数は、ポートまたはソケットへのクライアント接続を作成します。 socket_create によって生成されたソケットを提供する必要があります。 address パラメータは、ソケットまたは IP アドレスへのパスである必要があります。後者の場合は、その後に数値のポート番号を続ける必要があります。
次の例は、UDP プロトコルを使用してゲーム サーバーに接続し、情報を取得するプロセスを示しています。
ソケット接続
<?php
//UDPソケットを作成する
if(($socket =socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) < 0){
print("ソケットを作成できませんでした: " .
ソケット_strerror(socket_last_error()) . "n");
}
//5秒後にタイムアウト
ソケットセットオプション($ソケット, SOL_SOCKET,
SO_RCVTIMEO, array('sec'=>5,'usec'=>0));
//RtCWマスターサーバーに接続します
if(!socket_connect($socket, 'wolfmaster.idsoftware.com', 27950)){
print("接続できませんでした: " .
ソケット_strerror(socket_last_error()) . "n");
}
//サーバーにリクエストを送信
socket_write($socket, "xFFxFFxFFxFFgetserversx00");
//サーバーを取得する
$server = 配列();
while(FALSE !== ($line = @socket_read($socket, 4096))){
//データを解析する
for($i=22; ($i+5) < strlen($line); $i += 7){
$ip = ord(substr($line, $i+1, 1)) .'
ord(substr($line, $i+2, 1)) .'
ord(substr($line, $i+3, 1)) .'
ord(substr($line, $i+4, 1));
$port = (ord(substr($line, $i+5, 1)) * 256) +
ord(substr($line, $i+6, 1));
$server[] = array('ip'=>$ip, 'port'=>$port);
}
}
print("<h1>" . count($server) . " サーバー</h1>n");
//サーバーをループしてステータスを取得します
foreach($server as $s){
print("<h1>{$s['ip']}:{$s['port']}</h1>n");
//RtCWサーバーに接続します
if(!socket_connect($socket, $s['ip'], $s['port'])){
print("<p>n" .
ソケット_strerror(socket_last_error()) 。
"n</p>n");
続く;
}
//ステータスのリクエストを送信する
socket_write($socket, "xFFxFFxFFxFFgetstatusx00");
//サーバーからステータスを取得
if(FALSE === ($line = @socket_read($socket, 1024))){
print("<p>n" .
ソケット_strerror(socket_last_error()) 。
"n</p>n");
続く;
}
$part =explode("n", $line);
// 設定はバックスラッシュで区切られた 2 行目にあります
$setting =explode("\", $part[1]);
print("<h2>構成</h2>n");
print("<p>n");
for($s=1; $s < count($setting); $s += 2){
print("tt{$setting[$s]} = {$setting[$s+1]}<br>n");
}
print("</p>n");
print("<h2>プレイヤー</h2>n");
$lastPlayer = count($part) - 1;
for($p=2; $p < $lastPlayer; $p++){
$player =explode(" ", $part[$p]);
print("{$player[2]} スコア={$player[0]} " .
"Ping={$player[1]}<br>n");
}
print("</p>n");
ob_flush();
}
print("</table>n");
ソケットクローズ($ソケット);
?>
resourcesocket_create(整数ファミリー、整数ソケットタイプ、整数プロトコル)
socket_create はソケット構造を初期化します。最初のパラメータはプロトコル ファミリ、つまりドメインです。インターネット接続を指定するには AF_INET を使用するか、Unix ソケット接続を指定するには AF_UNIX を使用する必要があります。 2 番目のパラメータはソケットのタイプで、以下の表から選択できます。通常、TCP プロトコルを使用する場合は SOCK_STREAM を使用し、SOCK_DGRAM を使用する場合は UDP プロトコルを使用します。 3 番目のパラメータはプロトコルを指定します。 SOL_TCP または SOL_UDP を使用して、それぞれ TCP プロトコルと UDP プロトコルに対応させます。もう 1 つのオプションは、getprotobyname 関数を使用してこれを処理することです。
ソケットタイプ定数の説明
SOCK_DGRAM はパケット ソケットを自動的にアドレス指定します
SOCK_RAW RAW プロトコル インターフェイス
SOCK_RDM による信頼性の高いメッセージ交換
SOCK_SEQPACKET シーケンシャル データ パケット ソケット
SOCK_STREAM ストリームソケット
リソースsocket_create_listen(整数ポート、整数バックログ)
リスニング用のソケットを生成するには、socket_create_listen を使用する方が、socket_create より簡単な方法です。生成されたソケットは指定されたポートをリッスンし、オプションのパラメーター バックログで許可される接続の最大数を設定します。
ブール値ソケット作成_ペア(整数ファミリー、整数ソケットタイプ、整数プロトコル、配列ハンドル)
socket_create_pair 関数は、ソケット接続のペアを生成します。まず最初の 3 つのパラメータは、socket_create の説明です。handles パラメータは 2 つのソケット リソースを含む配列です。この関数は、C のソケットペア関数をカプセル化したものです。
ソケット作成_ペア
<?php
if(!socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $socket)){
print("ソケットを作成できませんでした!n");
出口();
}
$child = pcntl_fork();
if($child == -1){
print("フォークできませんでした!n");
出口();
}
elseif($child > 0){
//親
ソケットクローズ($ソケット[0]);
print("親: メッセージを待っていますn");
$message =socket_read($socket[1], 1024, PHP_NORMAL_READ);
print("親: メッセージを取得しました --$messagen");
socket_write($socket[1], "こんにちは、子プロセス!n");
pcntl_waitpid($child, $status);
}それ以外{
//子供
ソケットクローズ($ソケット[1]);
socket_write($socket[0], "こんにちは、親プロセス!n");
print("子: メッセージを待っていますn");
$message =socket_read($socket[0], 1024, PHP_NORMAL_READ);
print("子: メッセージを受け取りました --$messagen");
終了(0);
}
?>
valuesocket_get_option(リソースソケット、整数レベル、整数オプション)
socket_get_option 関数は、次の表にリストされている追加値を返します。socket_create によって生成されたソケット リソースとレベルを指定する必要があります。この取得されたソケット レベルは、SOL_SOCKET を使用して決定できます。あるいは、SOL_TCP などのプロトコルを使用して TCP プロトコルを表します。これらのオプションは、socket_set_option によって設定できます。
ソケット取得オプション
<?php
$socket = ソケット作成(AF_INET, SOCK_STREAM, SOL_TCP);
print('SO_BROADCAST: ' .
socket_get_option($socket, SOL_SOCKET,
SO_BROADCAST) . "<br>n");
print('SO_DEBUG: ' .
socket_get_option($socket, SOL_SOCKET,
SO_DEBUG) . "<br>n");
print('SO_DONTROUTE: ' .
socket_get_option($socket, SOL_SOCKET,
SO_DONTROUTE) . "<br>n");
print('SO_ERROR: ' .
socket_get_option($socket, SOL_SOCKET,
SO_ERROR) 。 "<br>n");
print('SO_KEEPALIVE: ' .
socket_get_option($socket, SOL_SOCKET,
SO_KEEPALIVE) . "<br>n");
print('SO_LINGER: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_LINGER)、TRUE) 。 "<br>n");
print('SO_OOBINLINE: ' .
socket_get_option($socket, SOL_SOCKET,
SO_OOBINLINE) . "<br>n");
print('SO_RCVBUF: ' .
socket_get_option($socket, SOL_SOCKET,
SO_RCVBUF) 。 "<br>n");
print('SO_RCVLOWAT: ' .
socket_get_option($socket, SOL_SOCKET,
SO_RCVLOWAT) 。 "<br>n");
print('SO_RCVTIMEO: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_RCVTIMEO)、TRUE) 。
print('SO_REUSEADDR: ' .
socket_get_option($socket, SOL_SOCKET,
SO_REUSEADDR) . "<br>n");
print('SO_SNDBUF: ' .
socket_get_option($socket, SOL_SOCKET,
SO_SNDBUF) 。 "<br>n");
print('SO_SNDLOWAT: ' .
socket_get_option($socket, SOL_SOCKET,
SO_SNDLOWAT) . "<br>n");
print('SO_SNDTIMEO: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_SNDTIMEO)、TRUE) 。
print('SO_TYPE: ' .
socket_get_option($socket, SOL_SOCKET,
SO_TYPE) . "<br>n");
?>
ソケットオプションテーブルのオプションの説明
SO_BROADCAST により、自動的にアドレス指定されたソケットがブロードキャスト パケットを送受信できるようになります。
SO_DEBUG はソケット デバッグ機能をオンにします。このオプションをオンにする権限を持つのは root のみです。
SO_DONTROUTE はゲートウェイ経由のルーティング パケットを受け入れません
SO_ERROR 最後のソケット エラーを取得およびクリアします。このオプションは設定する必要がない場合があります。
SO_KEEPALIVE アクティブなままのメッセージを開きます
SO_LINGER Socket_colse およびソケット_シャットダウンはメッセージ送信タイムアウトを中止します。このオプションは、l_onoff と l_linger の 2 つのキーを含む配列を使用します。
SO_OOBINLINE は受信バッファにデータを直接挿入します。
SO_RCVBUF は、バッファリングできる最大バイト数を制限します。
SO_RCVLOWAT は最小限のデータを受け入れることで遅延します
SO_RCVTIMEO 配列の 2 つのキー (sec と usec) を使用して、受け入れタイムアウトのレポートを遅らせます。
SO_REUSEADDR によりローカル アドレスの再利用が可能になります
SO_SNDBUF は送信バッファの最大バイト数を制限します
SO_SNDLOWAT は、最小限のバイトを受け入れながら、このプロトコルへのデータの送信を遅延します。
SO_SNDTIMEO 送信者がタイムアウトを超えた場合、タイムアウト エラーの報告を遅らせます。このオプションでは、配列のキー sec と usec を使用します。
SO_TYPE ソケットのタイプを取得します。このオプションは設定する必要がない場合があります
。
socket_getpeername は、指定された接続からアドレスとポートを取得します。接続が Unix ソケットの場合、ファイル システムへのパスが返されます。
ブール値のソケット_getsockname(リソースソケット、文字列アドレス、整数ポート)
socket_getsockname はソケットに名前を配置し、アドレスとポートのパラメーターを追加します。失敗した場合は false を返します。
(以下のsocket_iovec_*関数についてはあまり詳しくないので、あえて意訳せずに原文のままにします)
booleansocket_iovec_add(リソース iovector、整数の長さ)
socket_iovec_add 関数は、I/O ベクトルをスキャッター/ギャザー配列に追加します。
リソースソケット_iovec_alloc(整数カウント, …)
ソケット_iovec_alloc 関数は、I/O ベクトルのコレクションを処理するためのリソースを返します。最初の引数は、ベクトルの数を指定します。
ブール値のソケット_iovec_delete(リソース iovector、整数の位置)
socket_iovec_delete 関数は、指定された位置にある I/O ベクトルを削除します。
文字列ソケット_iovec_fetch(リソースiovector、整数位置)
socket_iovec_fetch 関数は、I/O ベクトル リソース内の指定されたベクトルの値を返します。
ブール値のソケット_iovec_free(リソース iovector)
socket_iovec_free 関数は、I/O ベクトル リソースに使用されているメモリを解放します。
ブール値のソケット_iovec_set(リソース iovector、整数の位置、文字列値)
socket_iovec_set は、指定された位置の I/O ベクトルの値を設定します。
整数socket_last_error(リソースソケット)
socket_last_error 関数は、操作中にソケット関数によって生成された最後のエラーを返します。上記の関数で指定された接続にソケット リソースのソケット オプションを設定している可能性があります。次の表に、返されるエラー コードを示します。 soclet_strerror 関数を使用して、詳細なエラーを取得することもできます。ソケット エラーをクリアするには、socket_clear_error 関数を使用します。
ソケットエラーコードテーブル定数の説明
SOCKET_E2BIGパラメータリストが長すぎます
SOCKET_EACCES には権限がありません
SOCKET_EADDRINUSE アドレスはすでに使用されています
SOCKET_EADDRNOTAVAIL は要求されたアドレスを解決できません
SOCKET_EADV ブロードキャスト (アドバタイズメント) エラー
SOCKET_EAFNOSUPPORT プロトコルはアドレス ファミリでサポートされていません
SOCKET_EAGAIN リソースが一時的に利用できません
SOCKET_EALREADY 操作はすでに実行中です
SOCKET_EBADE 無効な交換
SOCKET_EBADF 不正なファイル記述子
SOCKET_EBADFD ファイル記述子のエラーステータス
SOCKET_EBADMSG エラー メッセージ
SOCKET_EBADR リクエストの説明が無効です
SOCKET_EBADRQC 無効なリクエスト コードです
SOCKET_EBADSLT 無効な操作場所です
SOCKET_EBUSY ドライバーまたはリソースがビジー状態です
SOCKET_ECHRNG チャネル番号が範囲外です
SOCKET_ECOMM 送信通信エラー
SOCKET_ECONNABORTED ソフトウェアの理由によるトラフィックの中断
SOCKET_ECONNREFUSED 接続が拒否されました
SOCKET_ECONNRESET 接続は同じソケットによってリセットされます
SOCKET_EDESTADDRREQ には宛先アドレスが必要です
SOCKET_EDQUOT ディスク クォータを超過しました
SOCKET_EEXIST ファイルはすでに存在します
SOCKET_EFAULT 間違ったアドレス
SOCKET_EHOSTDOWN ホストがダウンしています
SOCKET_EHOSTUNREACH はホストにルーティングされません
SOCKET_EIDRM は ID が削除されたことを示します
SOCKET_EINPROGRESS オペレーションが実行中です
SOCKET_EINTR システムコールがブロックされました
SOCKET_EINVAL 無効なパラメータ
SOCKET_EIO 入出力エラー
SOCKET_EISCONN送信端子が接続されました
SOCKET_EISDIR はディレクトリです
SOCKET_EISNAM は指定されたタイプのファイルです
SOCKET_EL2HLT レベル 2 が中止されました
SOCKET_EL2NSYNC レベル 2 が同期していません
SOCKET_EL3HLT レベル 3 が中止されました
SOCKET_EL3RST レベル 3 がリセットされる
SOCKET_ELNRNG 接続番号が範囲外です
SOCKET_ELOOP シンボリック リンクのレベルが多すぎます
SOCKET_EMEDIUMTYPE 間違ったメディア タイプ (中間タイプ)
SOCKET_EMFILE 開いているファイルが多すぎます
SOCKET_EMLINK 接続が多すぎます
SOCKET_EMSGSIZE メッセージが長すぎます
SOCKET_EMULTIHOP 試行回数が多すぎます
SOCKET_ENAMETOOLONG ファイル名が長すぎます
SOCKET_ENETDOWN ネットワークがダウンしています
SOCKET_ENETRESET ネットワークが中断され、接続がリセットされました。
SOCKET_ENETUNREACHネットワークに到達できません
SOCKET_ENFILE システム内で開いているファイルが多すぎます
SOCKET_ENOANO 正極なし
SOCKET_ENOBUFS 使用可能なキャッシュ領域がありません
SOCKET_ENOCSI 使用可能な CSI 構造体がありません
SOCKET_ENODATA 利用可能なデータがありません
SOCKET_ENODEV そのようなドライバーはありません
SOCKET_ENOENT そのようなファイルまたはディレクトリはありません
SOCKET_ENOLCK 使用可能なレコード ロックがありません
既存のサービスへの SOCKET_ENOLINK 接続
SOCKET_ENOMEDIUM メディアが見つかりません
SOCKET_ENOMEM がメモリを割り当てられません
SOCKET_ENOMSG メッセージ タイプが指定されていません
SOCKET_ENONET デバイスがネットワーク上にありません
SOCKET_ENOPROTOOPT プロトコルは使用できません
SOCKET_ENOSPC ドライブに空き領域がありません
SOCKET_ENOSR がストリーム リソースを超えました
SOCKET_ENOSTR ドライバーはストリームではありません
SOCKET_ENOSYS 関数は実行されません
SOCKET_ENOTBLK ブロック ドライバーが必要です
SOCKET_ENOTCONN 送信端子が接続されていません
SOCKET_ENOTDIR にはディレクトリがありません
SOCKET_ENOTEMPTY ディレクトリが空です
SOCKET_ENOTSOCK 非ソケットでのソケット操作
SOCKET_ENOTTY 互換性のない IO コントローラー
SOCKET_ENOTUNIQ 名はネットワーク上で一意ではありません
SOCKET_ENXIO そのようなドライバーまたはアドレスはありません
SOCKET_EOPNOTSUPP 操作はサポートされていません
SOCKET_EPERM 操作は許可されていません
SOCKET_EPFNOSUPPORT プロトコル ファミリはサポートされていません
SOCKET_EPIPE パイプが失敗しました
SOCKET_EPROTO プロトコル エラー
SOCKET_EPROTONOSUPPORT プロトコルはサポートされていません
SOCKET_EPROTOTYPE ソケット上のプロトコル エラーのタイプ
SOCKET_EREMCHG リモート アドレスが変更されました
SOCKET_EREMOTE オブジェクトはリモートです
SOCKET_EREMOTEIO リモート I/O エラー
SOCKET_ERESTART 中断されたシステムコールが再開されます
SOCKET_EROFS ファイル システムは読み取り専用です
SOCKET_ESHUTDOWN。送信エンドポイント割り込みを送信できません。
SOCKET_ESOCKTNOSUPPORT ソケット タイプはサポートされていません
SOCKET_ESPIPE 不正検索
SOCKET_ESTRPIPE ストリーム パイプ エラー
SOCKET_ETIME タイマーが期限切れになる
SOCKET_ETIMEDOUT 接続タイムアウト
SOCKET_ETOOMANYREFS 結合するには接続が多すぎます
SOCKET_EUNATCH プロトコル ドライバーを接続できません
SOCKET_EUSERS ユーザーが多すぎます
SOCKET_EWOULDBLOCK リソースが一時的に利用できません
SOCKET_EXDEV 無効なクロスドライブ接続です
SOCKET_EXFULL 交換は完全な
ブール値です。socket_listen(リソース ソケット、整数バックログ)
このsocket_listen関数は、クライアントからの接続を待機します。backlogパラメータは、接続を待機できるキューの最大数を設定します。
stringsocket_read(リソースソケット、整数長、整数型)
socket_read 関数は、特定のソケットから指定されたバイトを読み取り、エラーがある場合は false を返します。デフォルトでは、バイナリセーフ読み取りモードが使用されます。 type パラメータを外部から PHP_BINARY_READ に設定することで、読み取りモードを変更できます。タイプを PHP_NORMAL_READ に設定することもできます。
ブール値ソケット_readv(リソースソケット、リソースiovector)
socket_readv 関数は、読み取ったデータを iovector リソースに挿入します。
integersocket_recv(リソースソケット、文字列バッファ、整数の長さ、整数フラグ)
socket_recv 関数はデータを読み取り、バッファーに挿入します。 Length パラメータは読み取る最大バイト数を設定し、flag パラメータは MSG_OOB または MSG_PEEK を使用できます。この関数は読み取ったバイト数を返します。
整数socket_recvfrom(リソースソケット、文字列バッファ、整数の長さ、文字列ホスト、整数ポート)
socket_frcvfrom 関数はデータを読み取り、キャッシュに挿入します。 Length パラメータは、受信が許可される最大バイト数を設定します。 flags パラメータは MSG_OOB または MSG_PEEK に設定できます。 PHP は、ホストから送信されたデータを取得できるように、ホストとポートのパラメーターを適切な値に設定します。
booleansocket_recvmsg(リソースソケット、リソースiovector、配列制御、整数の長さ、整数のフラグ、文字列ホスト、整数のポート)
socket_recvmsg 関数は、ソケットからデータを読み取り、I/O ベクトル リソースに挿入します。 PHP 設定制御パラメーターは、cmsg_level、cmsg_type、cmsg_data の 3 つの要素を含む連想配列です。 Lengthパラメータは、データの取得に関するデータに付加される長さパラメータである。 Flags パラメータは、許可される値と戻り値を設定します。この記事の執筆時点では、PHP はすべての出力定数を実行できません。 PHP は、リモート ホストから送信されたデータを取得するために、ホストとポートのパラメーターを適切な値に設定します。
(Socket_slect関数は言葉では意味が伝わらないと思うので翻訳しておりません)
整数ソケット選択(配列読み取り、配列書き込み、配列例外、整数タイムアウト秒、整数タイムアウト_マイクロ秒)
socket_select 関数は、ソケットへの変更を待ちます。PHP は、読み取り配列で指定されたソケットで新しいデータが受信されるかどうかを監視します。PHP は、書き込み配列で指定されたストリームを監視して、さらにデータを受け入れる準備ができているかどうかを確認します。エラーの場合、timeout_seconds 引数で指定された秒数が経過すると、関数はオプションの timeout_microseconds 引数を使用して 1 秒未満のタイムアウトを指定します。
ocket_select 関数は、変更されたソケットの数を返すか、呼び出しがタイムアウトした場合は FALSE を返し、変更されたソケットのみが含まれるように指定された配列を変更します。
監視する特定のタイプのソケットがない場合は、空の配列または NULL に設定された変数を渡すことができます。
整数socket_send(リソースソケット、文字列バッファ、整数の長さ、整数フラグ)
socket_send 関数はデータをバッファーに書き込み、それを接続に挿入します。バッファーに書き込み可能な最大バイト数を指定する必要があります。 flags パラメータを空に設定することも、MSG_DONTROUTE と MSG_OOB の組み合わせ定数のいずれかに設定することもできます。関数は終了して書き込まれたバイト数を返します。それ以外の場合は false を返します。
booleansocket_sendmsg(リソースソケット、リソースiovector、整数フラグ、文字列アドレス、整数ポート)
socket_sendmsg はソケットへのデータの送信を試みます。コネクションレスソケットに適しています。 Iovector パラメーターは、socket_iovec_alloc 関数によって生成されるリソースです。 flags パラメータは、NULL、MSG_DONTROUTE、MSG_OOB、または 2 つの組み合わせた定数として指定する必要があります。インターネット要求のアドレスとポートを指定する必要があります。
Socket_sendmsg 関数はデータ送信時に true を返しますが、データが到着するという保証はありません。
integersocket_sendto(リソースソケット、文字列バッファ、整数の長さ、整数のフラグ、文字列アドレス、整数のポート)
socket_sendto 関数は、データをバッファに書き込み、ソケットに送信しようとします。ほとんどのコネクションレスソケットに適しています。フラグは、NULL、MSG_DONTROUTE、MSG_OOB、または 2 つの定数の組み合わせとして指定する必要があります。アドレスと要求されたポートも指定する必要があります。
Socket_sendto 関数は、データが送信されると true を返しますが、データが到着するという保証はありません。
ブール値のsocket_set_block(リソースソケット)
socket_set_block 関数は、ソケットをブロック モード (デフォルト モード) に設定します。ブロック モードでは、I/O 操作は完了したリクエストに対して実行されます。
ブール値socket_set_nonblock(リソースソケット)
socket_set_nonblock 関数は、ソケットが非ブロック モードに挿入されるように設定します。非ブロック モードでは、データがなくても I/O 操作はすぐに戻ります。
booleansocket_set_option(リソースソケット、整数レベル、整数オプション、整数値)
socket_set_option 関数は、ソケットのオプションを設定します。 Level パラメーターは、レベルにフラグを立てる定数を設定します。有効な値には、SOL_SOCKET、SOL_TCP、および SOL_UDP が含まれます。オプション パラメータは、上記のソケット オプションの表の定数と一致する必要があります。
ブール値のsocket_shutdown(リソースソケット、整数の方法)
socket_shutdown 関数は、I/O 用のソケットを閉じます。方法 0 に設定するとデータの受信が停止し、1 に設定するとデータの送信が停止し、2 に設定すると両方の動作が停止します。
文字列ソケット_strerror(整数エラー)
socket_strerror 関数は、エラー番号と詳細なエラー情報を返します。
integersocket_write(リソースソケット、文字列バッファ、整数の長さ)
socket_write 関数はデータをバッファに書き込み、それをソケットに出力します。 length パラメータを指定して、バッファ内の最大バイト数を指定できます。この関数は通常、socket_send よりも便利です。
ブール値socket_writev(リソースソケット、リソースiovector)
socket_writev 関数は、I/O ベクトルを通じてソケットにデータを書き込みます。