php / php/php-src

Add curl_multi_fdset to PHP cURL extension

Ouverte
#19,576 5 commentaires 0 réactions 1 personne assignée Voir sur GitHub

@krakjoe y travaille déjà.

Depuis le 30/8/2025.

Extension: curl Feature Status: Verified
Langage dominant
C
Étoiles
40.4k
Forks
8.2k
Merge moyen
2 j 13 h
PR mergées (30 j)
96

Description

Description

The binding for curl_multi_fdset() (available in libcurl C API) is missing.

This creates a limitation:

  • In libcurl (C), developers can extract the underlying sockets and integrate them into a single event loop with other file descriptors (e.g. database sockets, custom UDP/TCP sockets, message queues, etc.) using select(), poll(), or epoll().
  • In PHP, it is not possible: we only have curl_multi_select(), which is isolated and works exclusively for cURL sockets.

Many PHP applications combine multiple asynchronous sources:

  • HTTP requests via cURL multi-handle
  • Database connections (PostgreSQL via pg_socket())
  • Custom sockets (e.g. UDP for inter-process communication)

Proposed:

curl_multi_fdset(CurlMultiHandle $mh, array &$read, array &$write, array &$except): int

Where:
$read, $write, $except are arrays of PHP stream resources corresponding to the fds returned by libcurl.
Return value is the max_fd (as in libcurl).

Example:

$read = [$pg_socket, $udp_socket];
$write = [];
$except = [];

curl_multi_fdset($mh, $read, $write, $except);
stream_select($read, $write, $except, $timeout);

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.