* disconnect fixes

* set blocking explicitely


git-svn-id: svn://netflint.net/xmpphp@12 ef36c318-a008-4979-b6e8-6b496270793b
This commit is contained in:
fritzy 2008-04-02 20:12:15 +00:00
parent 9bcf030bc6
commit 7548c9f136

View File

@ -31,6 +31,7 @@ class XMLStream {
var $stream_start = '<stream>'; var $stream_start = '<stream>';
var $stream_end = '</stream'; var $stream_end = '</stream';
var $disconnected = false; var $disconnected = false;
var $sent_disconnect = False;
var $ns_map = array(); var $ns_map = array();
var $current_ns = array(); var $current_ns = array();
var $xmlobj = Null; var $xmlobj = Null;
@ -76,6 +77,7 @@ class XMLStream {
function connect($persistent=False, $sendinit=True) { function connect($persistent=False, $sendinit=True) {
$this->disconnected = False; $this->disconnected = False;
$this->sent_disconnect = False;
if($persistent) { if($persistent) {
$conflag = STREAM_CLIENT_PERSISTENT; $conflag = STREAM_CLIENT_PERSISTENT;
} else { } else {
@ -83,6 +85,7 @@ class XMLStream {
} }
$this->log->log("Connecting to tcp://{$this->host}:{$this->port}"); $this->log->log("Connecting to tcp://{$this->host}:{$this->port}");
$this->socket = stream_socket_client("tcp://{$this->host}:{$this->port}", $flags=$conflag); $this->socket = stream_socket_client("tcp://{$this->host}:{$this->port}", $flags=$conflag);
stream_set_blocking($this-socket, 1);
if($sendinit) $this->send($this->stream_start); if($sendinit) $this->send($this->stream_start);
} }
@ -230,8 +233,11 @@ class XMLStream {
} }
if($this->xml_depth == 0 and !$this->been_reset) { if($this->xml_depth == 0 and !$this->been_reset) {
if(!$this->disconnected) { if(!$this->disconnected) {
$this->send($this->stream_end); if(!$this->sent_disconnect) {
$this->send($this->stream_end);
}
$this->disconnected = True; $this->disconnected = True;
$this->sent_disconnect = True;
fclose($this->socket); fclose($this->socket);
if($this->reconnect) { if($this->reconnect) {
$this->doReconnect(); $this->doReconnect();
@ -249,6 +255,7 @@ class XMLStream {
function disconnect() { function disconnect() {
$this->reconnect = False; $this->reconnect = False;
$this->send($this->stream_end); $this->send($this->stream_end);
$this->sent_disconnect = True;
$this->processUntil('end_stream', 5); $this->processUntil('end_stream', 5);
$this->disconnected = True; $this->disconnected = True;
} }