Skip to content

PHP socket_set_blocking() Function: Everything You Need to Know

As a PHP developer, you may need to control whether a socket is blocking or non-blocking to optimize performance and resource usage. The socket_set_blocking() function was historically used for this purpose, but it was deprecated in PHP 8.1 and removed in PHP 8.2. The modern alternative is stream_set_blocking(). In this article, we will look at how to set the blocking mode of a socket using the current standard.

What is stream_set_blocking()?

stream_set_blocking() is the modern PHP function used to set the blocking mode of a stream or socket. It replaces the deprecated socket_set_blocking() function. When a stream is in blocking mode, I/O operations like socket_read() or socket_write() will pause execution until data is available or the operation completes. In non-blocking mode, these operations return immediately, allowing your script to handle other tasks or implement polling.

How to Use stream_set_blocking()

Using stream_set_blocking() is straightforward. Here is the syntax of the function:

The PHP syntax of stream_set_blocking()

php
stream_set_blocking(resource|Socket $stream, bool $mode): bool

The function takes two parameters:

  • $stream: The socket or stream resource/object to configure. Note that modern PHP uses Socket objects instead of legacy resources.
  • $mode: true for blocking mode, false for non-blocking mode.

Here is an example of how to use stream_set_blocking() with proper error handling and resource cleanup:

How to Use stream_set_blocking()?

php
<?php

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("Socket creation failed: " . socket_strerror(socket_last_error()));
}

// Set to non-blocking mode
if (!stream_set_blocking($socket, false)) {
    die("Failed to set blocking mode");
}

// ... perform socket operations ...

socket_close($socket);

In this example, we use socket_create() to create a new socket, apply stream_set_blocking() to configure it, and ensure the socket is properly closed afterward.

Conclusion

Controlling the blocking mode of a socket is essential for optimizing performance and resource usage in PHP network applications. By using stream_set_blocking(), you can easily configure sockets to pause on I/O operations or return immediately, depending on your application's needs. We hope this guide helps you implement efficient socket handling in your projects.

Practice

In PHP, what does the socket_set_blocking() function do?

Do you find this helpful?

Dual-run preview — compare with live Symfony routes.