wangzhengquan
2020-10-10 9ebe80228c7b7cb35ccaeaaa46ccf726bf71d6bd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#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;
  }
  
}