PHPのマニュアルを読むと、socket_recv関数とsocket_read関数は同じように見えますが、どちらの関数もクライアントからデータを取得します。
これら2つの機能の違いを教えてもらえますか?
PHPのマニュアルを読むと、socket_recv関数とsocket_read関数は同じように見えますが、どちらの関数もクライアントからデータを取得します。
これら2つの機能の違いを教えてもらえますか?
socket_recv
受信したバイト数を
socket_read
返す 受信したデータを返す
バッファからバイトを読み取ることsocket_recv
ができ、受信したバイト数を知ることができます。socket_read
バッファから特定の量のデータのみを読み取ることができます
http://www.faqs.org/faqs/unix-faq/socket/#bから:
2.18. read() と recv() の違いは何ですか?
Andrew Gierth (andrew@erlenstar.demon.co.uk) から:
read() は、0 の flags パラメーターを指定した recv() と同等です。flags パラメーターの他の
値は、recv() の動作を変更します。
同様に、write() は flags == 0 を指定した send() と同等です。
MSG_WAITALL Block until at least len are received. However, if a signal is caught or the remote host disconnects, the function may return less data.
MSG_DONTWAIT With this flag set, the function returns even if it would normally have blocked.
もちろんsocket_recvを使用してデータが受信されるまで関数を待機させるブロッキング機能ですが、socket_readを使用すると、バイトがすでに受信されて待機しないと想定されるため、何も返さない場合があります。
Note:
socket_read() returns a zero length string ("") when there is no more data to read.