#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; } }