Edit report at https://bugs.php.net/bug.php?id=43731&edit=1

 ID:                 43731
 Comment by:         edo888 at gmail dot com
 Reported by:        uth3r_p3ndrag0n at yahoo dot com
 Summary:            socket_getpeername: cannot use on stdin with inetd
 Status:             Closed
 Type:               Bug
 Package:            Sockets related
 Operating System:   Linux, Debian Etch 4.0r1
 PHP Version:        5.2.5
 Block user comment: N
 Private report:     N

 New Comment:

Doesn't seem to work for me.

# php -v
PHP 5.3.8 with Suhosin-Patch (cli) (built: Dec 23 2011 18:46:04)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies

# php -r "fsockopen('php://stdin');"

Warning: fsockopen(): unable to connect to php://stdin:-1 (Unable to find the 
socket transport "php" - did you forget to enable it when you configured PHP?) 
in Command line code on line 1


Previous Comments:
------------------------------------------------------------------------
[2008-11-04 21:06:25] lbarn...@php.net

This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.

Fixed, now stream_socket_get_name(STDIN, true) should work in the cli.

------------------------------------------------------------------------
[2008-01-02 19:58:17] uth3r_p3ndrag0n at yahoo dot com

Description:
------------
When running a php script via inetd, I cannot get the remote address due to 
socket_getpeername's parameter type.

There seems no way to treat the stdin as a socket for this function.  The C 
system call, getpeerbyname (in <sys/socket.h>) takes a file descriptor.  When 
called by inetd, passing 0 (or stdin) returns the peer information of the 
socket which is mapped to the stdin of the running process.

There may not be anyway to work around this considering the way sockets were 
designed in php.  I tried opening php://stdin and using the resource returned, 
but that isn't a Socket resource. 

I would have expected to be able get a socket resource of stdin via 
'fsockopen("php://stdin")', as specified in 
http://www.php.net/manual/en/wrappers.php.php, but despite it's url style 
naming, fsockopen returns 'Unable to find the socket transport "php"'


Reproduce code:
---------------
    $stdin = fopen('php://stdin');
    socket_getpeername($stdin, $addr, $port);

OR

    $stdin = fsockopen('php://stdin');
    socket_getpeername($stdin, $addr, $port);


Expected result:
----------------
$addr and $port should have been populated with the ip address and port #.

Actual result:
--------------
Warning: socket_getpeername(): supplied resource is not a valid Socket resource 
in [script name] on line X

OR

Warning: fsockopen(): unable to connect to php://stdin:-1 (Unable to find the 
socket transport "php" - did you forget to enable it when you configured PHP?) 
in [script_name] on line X



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=43731&edit=1

Reply via email to