if (what&eSocketNotifier::Write && outbuf.size() )
{
queue_data d = outbuf.front();
- outbuf.pop();
- if ( ::write( fd[1], d.data, d.len ) != d.len )
- {
- /* emit */ dataSent(-1);
-// eDebug("writeError");
- }
+ int wr = ::write( fd[1], d.data+d.dataSent, d.len-d.dataSent );
+ if (wr < 0)
+ eDebug("eConsoleAppContainer write failed (%m)");
else
+ d.dataSent += wr;
+ if (d.dataSent == d.len)
{
+ outbuf.pop();
+ delete [] d.data;
/* emit */ dataSent(0);
-// eDebug("write ok");
}
- delete [] d.data;
}
if ( !outbuf.size() )
out->stop();
struct queue_data
{
queue_data( char *data, int len )
- :data(data), len(len)
+ :data(data), len(len), dataSent(0)
{
}
char *data;
int len;
+ int dataSent;
};
#endif