php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #49416 Add stream_socket_listen() and stream_socket_set_option() functions
Submitted: 2009-08-30 14:27 UTC Modified: 2010-12-29 13:18 UTC
Votes:3
Avg. Score:4.7 ± 0.5
Reproduced:2 of 3 (66.7%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: kak dot serpom dot po dot yaitsam at gmail dot com Assigned:
Status: Open Package: Streams related
PHP Version: * OS: *
Private report: No CVE-ID: None
 [2009-08-30 14:27 UTC] kak dot serpom dot po dot yaitsam at gmail dot com
Description:
------------
Please, add function stream_socket_listen(resource,backlog): 
it should call listen() for the socket created by 
stream_socket_server beforehand.

I need to use stream_socket_server but I can not use socket_*,
because of libevent.

Also, it would be nice to have a stream_socket_set_option function,
which allows to apply SO_REUSE and other parameters.

Thanks.


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-12-29 13:18 UTC] jani@php.net
-Package: Feature/Change Request +Package: Streams related -Operating System: any +Operating System: * -PHP Version: 5.3.0 +PHP Version: *
 [2010-12-29 13:18 UTC] jani@php.net
-Summary: stream_socket_listen() and stream_socket_set_option() functions. +Summary: Add stream_socket_listen() and stream_socket_set_option() functions
 [2014-07-15 16:32 UTC] jpauli@php.net
I can't get how libevent would change anything on your problem. Could you elaborate please, knowing PHP wont use such a layer internally anyway ?

Also, I would strongly recommand you to use ext/socket.
ext/socket is a very thin wrapper over OS's socket capabilities, whereas stream_ suffer from a much more complex layer.
For example, for socket low level option, such as SO_REUSE , ext/socket is much more suitable. http://www.php.net/ref.sockets
 [2024-07-31 23:17 UTC] thewitness@php.net
The stream_socket_server() function is implemented incorrectly on the backend.  For example, I'm unable to create a connection with an acl.  

I can create this:

tcp://0.0.0.0:someport

but not:

tcp://192.168.11.0:someport 

This would normally allow any host on the 192.168.11.0 network to speak to the connection.  Instead you get an error that it can not validate the hostname.  There is really no reason to validate it, it's a network and not a host.

Also, the default backlog, as seen in some comments is only 5, and not configurable similar to the built in socket() functions.
 [2024-07-31 23:43 UTC] thewitness@php.net
Here is the reason for the backlog option.  In this example, the default backlog of my system is 128:

sysctl -a | grep somaxconn
net.core.somaxconn = 128

I setup a stream_socket_server on port 2057 and I have this:

ss -lnp | grep "2057"
tcp    LISTEN     0      32        *:2057                  *:*                   users:(("php",pid=11297,fd=7))

You see, I have no way to set it.  It's that simple.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 14:01:29 2024 UTC