Note that if you set the socket non-blocking via socket_set_blocking() you cannot check if the socket has timed out with this function.
Example:
$status = socket_get_status($fp);
if ($status['timed_out']) {
echo "socket timed out\n";
}
The above condition will never be true even if the socket has timed out.
I'm not sure if this behaviour is just not documented or a bug. Anyways I'm posting it here because it took some time to figure out.