2009-07-12 3 views
3

Ich habe einige einfache PHP-Code, derWie erstellt man eine SSL-Verbindung in PHP mit SO_KEEPALIVE?

$streamContext = stream_context_create(); 
stream_context_set_option($streamContext, 'ssl', 'local_cert', $this->sslPem); 
stream_context_set_option($streamContext, 'ssl', 'passphrase', $this->passPhrase); 

$this->apnsConnection = stream_socket_client('ssl://'.$this->apnsHost.':'.$this->apnsPort, $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext); 

Aber wissen eine SSL-Verbindung schafft, wie SO_KEEPALIVE auf true zu setzen? Ich habe auch STREAM_CLIENT_PERSISTENT versucht, was nicht das Gleiche ist.

Antwort

1

Haben Sie (über die Netzwerkprotokollierung) verifiziert, dass Sie die Socket-Option einstellen müssen?

Was senden Sie über den Socket? HTTP/HTTPS führt seine eigene Funktion zur Wiederverwendung von Verbindungen über den Header "Connection" ein, so dass die Option auf dem Socket nicht unbedingt die von Ihnen gewünschte Option ist.

1

SO_KEEPALIVE wie in

The SO_KEEPALIVE option causes a packet (called a 'keepalive probe') to be sent to the remote system if a long time (by default, more than 2 hours) passes with no other data being sent or received.
?
Ich weiß nicht, wie dies mit STREAM_CLIENT_PERSISTENT verwandt ist, aber Sie können diese Option mit socket_set_option (d. H. Mit dem sockets extension und nicht Streams) festlegen.

+0

wie und welche Option zu setzen? – erotsppa

+0

Das wäre socket_set_option ($ socket, SOL_SOCKET, SO_KEEPALIVE, 1). Aber dann hast du wieder keine Unterstützung für ssl. Ich habe keine Möglichkeit gefunden, die Option für den ssl-Stream einzustellen. Sie würden dafür php_stream_set_option benötigen, aber es ist eine interne Funktion, die dem PHP-Skript nicht zugänglich ist. – VolkerK

+0

kann nicht glauben, PHP hat keine Möglichkeit, dies zu tun .... – erotsppa