If you connect to a Server in a way like you do with telnet or some similar protokoll you may have problems with sending data to the server. I found out that at some servers there is a different between:
<?php
socket_write ($my_socket, $line, strlen ($line));
socket_write ($my_socket, "\r\n", strlen ("\r\n"));
?>
witch worked at least, and
<?php
socket_write ($my_socket, $line."\r\n", strlen ($line."\r\n"));
?>
wich made the server stop sending any data.
I hope this helps to save a lot of time. I needed about two days to find out, that this was the problem ;)
socket_write
(PHP 4 >= 4.0.7, PHP 5)
socket_write — ソケットに書き込む
説明
int socket_write ( resource $socket, string $buffer [, int $length] )関数 socket_write() は、 buffer の内容をソケット socket に書き込みます。
オプションのパラメータ length で、ソケットに 書き込むバイト数を指定することが可能です。この値がバッファの長さより 大きい場合、自動的にバッファのサイズに切り詰められます。
ソケットへの書き込みに成功したデータのバイト数を返します。エラー時には FALSE を返します。エラーコードは socket_last_error() を用いて取得することができ、この値を socket_strerror() に渡すことでエラー情報を文字列で取得可能です。
注意: socket_write() は、バッファの内容を必ずしもすべて 書き込むとは限りません。ネットワークバッファの状態にもよりますが、 たとえ 1 バイトだけ書き込まれたのであったとしても、それはエラーでは なく正常な動作です。そのため、データがすべて書き込まれたのかどうかに 注意する必要があります。
注意: socket_write() がゼロを返すことも十分ありえます。 これは、書き込むデータが存在しなかったことを意味します。エラーを チェックするために FALSE かどうかを調べる際には、必ず === 演算子を使用しましょう。
socket_accept()、 socket_bind()、 socket_connect()、 socket_listen()、 socket_read() および socket_strerror() も参照ください。
socket_write
24-Aug-2006 02:27
20-Aug-2002 08:43
from http://www.manualy.sk/sock-faq/unix-socket-faq-2.html
read() is equivalent to recv() with a flags parameter of 0. Other values for the flags parameter change the behaviour of recv(). Similarly, write() is equivalent to send() with flags == 0.