PHP dispose de deux différents Api pour interagir avec des sockets. Il est le faible niveau de l'API socket qui, fondamentalement, enveloppe le C API socket. Et il y a un niveau élevé de flux de sockets API, qui met en œuvre le PHP interface de flux.
Malheureusement, le flux d'API socket ne prend pas en charge le réglage de faible niveau d'options de prise. Cependant, ce est quelque chose que j'ai à faire. De même, l'API socket ne prend pas en charge l'utilisation de la fonction de base des appels comme fread
, fwrite
et fclose
, ce qui la rend incompatible avec le reste de mon code.
PHP 5.4 introduit la socket_import_stream fonction. Cela permet de prendre un socket de flux et d'obtenir le sous-jacent ressource de socket. Mon plan était de l'utiliser pour créer le socket de flux, d'obtenir la prise, mettre quelques options sur elle, et puis continuer à utiliser le flux d'origine socket.
La raison pour laquelle cela ne fonctionne pas pour moi, c'est que j'ai besoin de configurer les options avant de liaison. La seule façon de se lier à un socket de flux consiste à utiliser stream_socket_server, qui a déjà effectue la liaison. C'est pourquoi je ne pouvais pas l'utiliser.
Je suis maintenant à la recherche de l'inverse d' socket_import_stream
, de sorte que je peux convertir mes ressource de socket dans un flux de support. Je n'ai pas été en mesure de trouver une telle fonction, mais je suis en espérant que certaines personnes très intelligentes qui peuvent m'aider. Ou de soumettre un patch à la source en PHP qui le fait. Ou me donner des conseils sur la rédaction d'un tel patch.
EDIT: j'ai un code qui agit sur un PHP stream analyser des paquets DNS de lui. Je veux réutiliser le code avec une multidiffusion à douille. Je ne peut pas activer le multicast sur un socket de flux, et je ne peut pas utiliser les fonctions flux sur une socket raw.
EDIT2: je veux utiliser ce flux, stream_select
, de manière personnalisée, les gestionnaires de flux ne sont pas une option, malheureusement.