Hi Internals First of all, Happy new year!
I've found that everytime `stream_socket_accept()` accepts a SSL/TLS connection, it always read 'local_cert' and 'local_pk' files despite being read and verified before by `stream_socket_server()`. There's no problem with 'local_cert' but 'local_pk' because private key files usually have root 0600 permission. And that may be an issue because you must either run PHP as root or change permission of private key files (I'm doing the latter as workaround) in order to make `stream_socket_accept()` work. Is it possible to make `stream_socket_server()` keep private key file in memory? (Like nginx does, I think) Here's a simple scenario with the issue: <?php $server = stream_socket_server( 'tls://0.0.0.0:443', $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, stream_context_create([ 'ssl' => [ 'local_cert' => '/path/to/cert', 'local_pk' => '/path/to/pk', ], ]), ); $num_cpus = (int)shell_exec('nproc'); for ($i = 0; $i < $num_cpus; $i++) { // fork a worker process $pid = pcntl_fork(); if ($pid === 0) { // change user/group of forked process to nobody posix_setgid(65534); posix_setuid(65534); while (true) { // This won't work because nobody cannot read private key $client = stream_socket_accept($server); if ($client) { // do something with connections // ... } } } } // master waits for children to exit // ... Another feature that I've found `stream_socket_accept()` lacks is TLS session resumption. Is there someone working on this feature? I apologize in advance if this topic had been raised before or if I misunderstood something. Cheers Kosit