sending a few mbs or more results in incomplete transfers, send data in a loop and chunks instead, socket_write reports complete write even though it is only a partial transfer, possibly because of buffer overrun somewhere.
$strlen=strlen($msg);
$totaltransferred=0;
$blocksize=10000;
for ($a=0;$a<$strlen;$a+=$blocksize){
$part=substr($msg,$a,$blocksize);
$transferred=socket_write($socket,$part,strlen($part));
$totaltransferred+=$transferred;
}
if ($totaltransferred<$strlen){
echo "incomplete transfer";
}