Some applications will create the handle, immediately send data, flush
and delete it, expecting the data to be sent to remote peer.
This is a bad behavior as the application would become unresponsive
until the connection is established, data can be written (since
depends on server consuming it), then allow it to be closed.
A proper behavior here would be to chain based on events, with the
usage of a copier would be simply wait for "done" event.
However the legacy API allowed this and terminology depends on this
awkward "feature", thus be bug-compatible.
This fixes T5015.
if (!svr->dialer) return;
+ while (!efl_io_closer_closed_get(svr->dialer) &&
+ !efl_net_dialer_connected_get(svr->dialer))
+ ecore_main_loop_iterate();
+
efl_io_buffered_stream_flush(svr->dialer, EINA_FALSE, EINA_TRUE);
inner_dialer = efl_io_buffered_stream_inner_io_get(svr->dialer);
}
if (svr->dialer.input)
{
+ while (!efl_io_closer_closed_get(svr->dialer.dialer) &&
+ !efl_net_dialer_connected_get(svr->dialer.dialer))
+ ecore_main_loop_iterate();
while (efl_io_queue_usage_get(svr->dialer.input) > 0)
efl_io_copier_flush(svr->dialer.send_copier, EINA_TRUE, EINA_TRUE);
return;