+ IOBuffer IOB;
+ StrBuf *Line, *OutBuf;
+ int Finished = 0;
+
+ memset(&IOB, 0, sizeof(IOB));
+ IOB.Buf = NewStrBufPlain(NULL, SIZ);
+ IOB.fd = serv_sock;
+ Line = NewStrBufPlain(NULL, SIZ);
+ OutBuf = NewStrBufPlain(NULL, SIZ * 10);
+
+ while (!Finished && (StrBuf_read_one_chunk_callback (serv_sock, 0, &IOB) >= 0))
+ {
+ eReadState State;
+
+ State = eReadSuccess;
+ while (!Finished && (State == eReadSuccess))
+ {
+ if (IOBufferStrLength(&IOB) == 0)
+ {
+ State = eMustReadMore;
+ break;
+ }
+ State = StrBufChunkSipLine(Line, &IOB);
+ switch (State)
+ {
+ case eReadSuccess:
+ if (!strcmp(ChrPtr(Line), "000"))
+ {
+ Finished = 1;
+ break;
+ }
+ StrBufAppendBuf(OutBuf, Line, 0);
+ StrBufAppendBufPlain(OutBuf, HKEY("\n"), 0);
+// alarm(watchdog); /* reset the watchdog timer */
+ break;
+ case eBufferNotEmpty:
+ break;
+ case eMustReadMore:
+ continue;
+ case eReadFail:
+ fprintf(stderr, "WTF? Exit!\n");
+ exit(-1);
+ break;
+ }
+ if (StrLength(OutBuf) > 5*SIZ)
+ {
+ fwrite(ChrPtr(OutBuf), 1, StrLength(OutBuf), stdout);
+ FlushStrBuf(OutBuf);
+ }
+ }
+ }
+ if (StrLength(OutBuf) > 0)
+ {
+ fwrite(ChrPtr(OutBuf), 1, StrLength(OutBuf), stdout);