Req #75367 [Wfx]: socket_select with STDIN on linux

From: Date: Thu, 12 Oct 2017 19:09:47 +0000
Subject: Req #75367 [Wfx]: socket_select with STDIN on linux
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-211655@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=75367&edit=1 ID: 75367 Updated by: bwoebi@php.net Reported by: divinity76 at gmail dot com Summary: socket_select with STDIN on linux Status: Wont fix Type: Feature/Change Request Package: Sockets related Operating System: Debian 10, kernel 4.12.13 PHP Version: 7.0.24 Block user comment: N Private report: N New Comment: Well, then you need to use socket_export_stream() on $srv if you want to use both in conjunction with stream_select(). Previous Comments: ------------------------------------------------------------------------ [2017-10-12 17:25:25] divinity76 at gmail dot com @bwoebi neat trick in theory, but: $ php -r "socket_import_stream(STDIN);" PHP Warning: socket_import_stream(): cannot represent a stream of type STDIO as a Socket Descriptor in Command line code on line 1 PHP Stack trace: PHP 1. {main}() Command line code:0 PHP 2. socket_import_stream() Command line code:1 ------------------------------------------------------------------------ [2017-10-12 17:12:34] bwoebi@php.net STDIN is a stream resource, not a socket resource. Use socket_import_stream(STDIN), if you wish to use socket_select() here. (Or, use socket_export_stream($srv) and use stream_select().) ------------------------------------------------------------------------ [2017-10-12 17:06:42] divinity76 at gmail dot com Description: ------------ socket_select should be able to listen to STDIN on linux, because it could be useful, and the underlying select() call is fully capable of doing it. i was recently in a situation where i needed to listen to changes both in a bunch of socket_accept'ed sockets, and STDIN at the same time, but socket_select doesn't accept STDIN in the $read array.. at least on linux, that shouldn't be a problem. Test script: --------------- <?php const PORT=9999; $srv = socket_create ( AF_INET, SOCK_STREAM, SOL_TCP ); socket_bind ( $srv, "0", PORT ); socket_listen ( $srv ); $unused = array (); $read = array ( $srv, STDIN ); while ( false !== socket_select ( $read, $unused, $unused, NULL ) ) { die("detected something"); } Expected result: ---------------- it should detect activity on STDIN Actual result: -------------- PHP Warning: socket_select(): supplied resource is not a valid Socket resource in /plain.php on line 11 PHP Stack trace: PHP 1. {main}() /plain.php:0 PHP 2. socket_select() /plain.php:11 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=75367&edit=1

« previous php.bugs (#211655) next »