int tcpclient_readline(tcpclient_t* cli, char* userbuf, int buf_size, int timeout) { int n = 0; int i = 0; if (cli->pushed_back > 0) { userbuf[i] = cli->pushed_back; i++; cli->pushed_back = -1; } for (; i < buf_size; ++i) { char ch; n = tcpclient_read(cli, &ch, 1, timeout); if(n < 0) printf("n : %d\n", n); if (n <= 0) { printf("err: no linefeed(i=%d, n:%d)\n",i,n); break; // error } if (ch == '\n' || ch == '\r') { userbuf[i++] = ch; break; // success } userbuf[i] = ch; } if (i >= buf_size) { // No CR or LF found. --i; cli->pushed_back = userbuf[buf_size - 1] & 0xff; userbuf[buf_size - 1] = '\0'; } userbuf[i] = '\0'; if (i == 0 && n <= 0) { // error printf("i== 0 && n:%d\n",n); return -1; } //printf("recv: %s", userbuf); return i; // the number of characters filled into user buffer. }
int tcpclient_readline(urg_tcpclient_t* cli, char* userbuf, int buf_size, int timeout) { int n = 0; int i = 0; if (cli->pushed_back > 0) { userbuf[i] = cli->pushed_back; i++; cli->pushed_back = -1; } for (; i < buf_size; ++i) { char ch; n = tcpclient_read(cli, &ch, 1, timeout); if (n <= 0) { break; // error } if (ch == '\n' || ch == '\r') { break; // success } userbuf[i] = ch; } if (i >= buf_size) { // No CR or LF found. --i; cli->pushed_back = userbuf[buf_size - 1] & 0xff; userbuf[buf_size - 1] = '\0'; } userbuf[i] = '\0'; if (i == 0 && n <= 0) { // error return -1; } return i; // the number of characters filled into user buffer. }