#include "net_mod_socket_io.h"
|
#include "socket_io.h"
|
|
|
ssize_t rio_readpkgb(rio_t *rp, char *usrbuf, size_t maxlen)
|
{
|
int n, rc;
|
char c;
|
char *bufp = usrbuf;
|
int pkg_sep_i = 0;
|
int pkg_sep_len = strlen(PKG_SEP);
|
const char * pkg_sep = PKG_SEP;
|
|
for (n = 0; n < maxlen; n++)
|
{
|
if ((rc = rio_readnb(rp, &c, 1)) == 1)
|
{
|
|
*bufp++ = c;
|
|
if(c == *(pkg_sep + pkg_sep_i)) {
|
pkg_sep_i++;
|
if(pkg_sep_i == pkg_sep_len) {
|
|
break;
|
}
|
} else {
|
|
pkg_sep_i = 0;
|
}
|
|
}
|
else if (rc == 0)
|
{
|
if (n == 0)
|
return 0; /* EOF, no data read */
|
else
|
break; /* EOF, some data was read */
|
}
|
else
|
return -1; /* Error */
|
}
|
|
if(pkg_sep_i == pkg_sep_len) {
|
*(bufp - pkg_sep_len) = 0;
|
return n - pkg_sep_len;
|
} else {
|
return -1;
|
}
|
|
}
|