【发布时间】:2016-05-15 09:25:26
【问题描述】:
我正在尝试做一个小的proxy 服务。
现在的问题是我无法显示来自网络服务的图像。
我用Rio_readlineb读回图像数据,但无法显示。
while ((Rio_readlineb(&rio_client, buf, MAXLINE)) !=0){
Rio_writen(fd, buf, strlen(buf));
}
但是当我使用Rio_readnb阅读时,问题就解决了。
while ((size = Rio_readnb(&rio_client, body, MAXLINE)) != 0)
Rio_writen(fd, body, size);
我不知道问题出在哪里。
readnb
ssize_t rio_readnb(rio_t *rp, void *usrbuf, size_t n)
{
size_t nleft = n;
ssize_t nread;
char *bufp = usrbuf;
while (nleft > 0) {
if ((nread = rio_read(rp, bufp, nleft)) < 0)
return -1; /* errno set by read() */
else if (nread == 0)
break; /* EOF */
nleft -= nread;
bufp += nread;
}
return (n - nleft); /* return >= 0 */
}
rio_readlineb
ssize_t rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen)
{
int n, rc;
char c, *bufp = usrbuf;
for (n = 1; n < maxlen; n++) {
if ((rc = rio_read(rp, &c, 1)) == 1) {
*bufp++ = c;
if (c == '\n') {
n++;
break;
}
} else if (rc == 0) {
if (n == 1)
return 0; /* EOF, no data read */
else
break; /* EOF, some data was read */
} else
return -1; /* Error */
}
*bufp = 0;
return n-1;
}
rio_readlineb是不是截断了数据?但是如果MAXLINE太小,rio_readnb也会截断数据。那么问题出在哪里?
【问题讨论】:
标签: c unix networking