powered by Jive Software

How does Openfire handle connection drops, while sending a packet?


some of our clients have an unstable internet connection, so that their client (Smack) often get error messages like:

java.io.EOFException: no more data available - expected end tag </stream:stream> to close start tag stream:stream from line 1, parser stopped on END_TAG seen …subscription=“both”/>…

After some research, this error is likely because the socket has been closed.

According to the customers, messages are then not received, if this error has occured.

How can we make sure, that packets are received by the recipient?

E.g. how does Openfire handles the case, if the socket is closed while writing a Message to the output stream?

I imagine that instead of the full message, only “text” may arrive at the recipient.

Is this case possible at all?

Will Openfire then write the message to the offline storage and try again later?

And what about IQ packets? If the client sends an IQ GET packet and expects a RESULT packet, but the connection drops in the mean while, so that Openfire cannot deliver the RESULT packet. What happens with the result packet?

Could a plugin handle such a case, which would store undeliverable packets for like a few minutes?