PHP socket_get_status Function
last modified April 4, 2025
The PHP socket_get_status
function retrieves information about
a socket stream. It's useful for monitoring socket connections in network
programming.
Basic Definition
socket_get_status
returns an array with socket stream metadata.
It provides details like timed_out, blocked, eof, and unread_bytes.
Syntax: socket_get_status(resource $socket): array
.
Returns an associative array with socket status information.
Requires an active socket connection.
Basic Socket Status Check
This example shows how to get basic status information from a socket.
<?php declare(strict_types=1); $socket = fsockopen("www.example.com", 80); $status = socket_get_status($socket); print_r($status); fclose($socket);
This connects to example.com on port 80 and retrieves socket status. The output shows various connection parameters and state information.
Checking for Timeout
This demonstrates checking if a socket operation has timed out.
<?php declare(strict_types=1); $socket = fsockopen("www.example.com", 80); stream_set_timeout($socket, 1); fread($socket, 10000); // Force potential timeout $status = socket_get_status($socket); echo $status['timed_out'] ? "Timeout occurred" : "No timeout"; fclose($socket);
This sets a short timeout and checks if the read operation timed out. The timed_out flag helps detect connection issues in network applications.
Monitoring Unread Bytes
This example shows how to check for unread bytes in the socket buffer.
<?php declare(strict_types=1); $socket = fsockopen("www.example.com", 80); fwrite($socket, "GET / HTTP/1.0\r\nHost: www.example.com\r\n\r\n"); $status = socket_get_status($socket); echo "Unread bytes: " . $status['unread_bytes']; fclose($socket);
After sending a request, this checks how many bytes remain unread. This helps manage buffer sizes and optimize network communication.
Checking End-of-File Status
This demonstrates checking if the socket has reached end-of-file.
<?php declare(strict_types=1); $socket = fsockopen("www.example.com", 80); fwrite($socket, "GET / HTTP/1.0\r\nHost: www.example.com\r\n\r\n"); while (!feof($socket)) { fread($socket, 1024); } $status = socket_get_status($socket); echo $status['eof'] ? "EOF reached" : "Data still available"; fclose($socket);
This reads until end-of-file and verifies the eof flag in the status. The eof flag indicates when no more data is available from the socket.
Complete Socket Monitoring
This shows a comprehensive socket monitoring example with all status flags.
<?php declare(strict_types=1); function monitorSocket($host, $port) { $socket = fsockopen($host, $port); if (!$socket) return false; $status = socket_get_status($socket); echo "Socket status:\n"; echo "Timed out: " . ($status['timed_out'] ? 'Yes' : 'No') . "\n"; echo "Blocked: " . ($status['blocked'] ? 'Yes' : 'No') . "\n"; echo "EOF: " . ($status['eof'] ? 'Yes' : 'No') . "\n"; echo "Unread bytes: " . $status['unread_bytes'] . "\n"; fclose($socket); return true; } monitorSocket("www.example.com", 80);
This function provides complete socket status monitoring in one call. It displays all important socket parameters for debugging and analysis.
Best Practices
- Error Handling: Always check if socket operations succeed
- Resource Management: Close sockets when done
- Timeout Configuration: Set appropriate timeouts
- Status Monitoring: Check status regularly
Source
PHP stream_get_meta_data Documentation
This tutorial covered the PHP socket_get_status
function with
practical examples for socket monitoring in network programming.