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

 ID:                 62605
 Comment by:         bbroerman at bbroerman dot net
 Reported by:        sempasha at gmail dot com
 Summary:            stream_set_timeout does not affect on sll socket
                     connections
 Status:             Open
 Type:               Bug
 Package:            Network related
 Operating System:   Windows 7, CentOS 6.3
 PHP Version:        5.3.14
 Block user comment: N
 Private report:     N

 New Comment:

My company despirately needs this to be fixed! We are experiencing the same 
issue ( from within a PHP extension we are developing ). We really need this to 
be able to support SSL with read timeouts!


Previous Comments:
------------------------------------------------------------------------
[2012-07-19 05:43:51] sempasha at gmail dot com

Description:
------------
Unable to set read timeout for socket which work with SSL connection by 
stream_set_timeout function. In other case, when we use socket with non-SSL 
connection, socket_set_timeout works fine. There are 2 potential problems:
1. stream_set_timeout returns TRUE, but does not works as expected
2. stream_set_timeout does not work for sockets with SSL connections

Related bugs are #23618, #35105, #43796, #47929.
Some patches attached to every related bug, but still not fixed in PHP. It's 
hard to believe, that since year 2003 nothing was done on this problem.

Test script:
---------------
<?php
// test.php
// on port 8000 at 127.0.0.1 runs daemon, which accepts incoming connections 
and nothing more
$socket = fsockopen('ssl://127.0.0.1', 8000, $errno, $errstr, 10);

if (!is_resource($socket))
        die('Socket connection error '.$errno.', '.$errstr.' at line 
'.__LINE__.' in file '.__FILE__);
        
if (!stream_set_timeout($socket, 1))
    die('Unable to set stream timeout at line '.__LINE__.' ion file '.__FILE__);

if (!set_time_limit(2))
        die('Unable to set time limit at line '.__LINE__.' ion file '.__FILE__);

$message = fread($socket, 1024).PHP_EOL;

$metadata = stream_get_meta_data($socket);
        
if ($metadata['timed_out'])
        die('Stream is timed out at line '.__LINE__.' in file '.__FILE__);

Expected result:
----------------
Possible output variants:
1. socket open error
>test.php
Socket connection error SOCKET-OPEN-ERROR-CODE, SOCKET-OPEN-ERROR-TEXT at line 
8 in file test.php

2. stream_set_timeout error
>test.php
Unable to set stream timeout at line 11 ion file test.php

3. stream_set_timeout works fine and reading breaked by timeout
>test.php
Stream is timed out at line 21 in file test.php

4. stream_set_timeout does not affect (despite the fact it returns TRUE) and 
limit of script execution time exceeded
>test.php
Fatal error: Maximum execution time of 2 seconds exceeded in test.php on line 16

Actual result:
--------------
Real output variants:
1. socket open error
>test.php
Socket connection error SOCKET-OPEN-ERROR-CODE, SOCKET-OPEN-ERROR-TEXT at line 
8 in file test.php

2. stream_set_timeout never return FALSE
>test.php
Unable to set stream timeout at line 11 ion file test.php

3. stream_set_timeout does not affect, reading never ends, empty output
>test.php

4. stream_set_timeout does not affect (despite the fact it returns TRUE) but 
limit of script execution time will never reached, empty output, reading never 
ends
>test.php



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



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

Reply via email to