您的位置:首页 > 其它

防止粘包的read write函数

2015-10-09 11:32 337 查看
ssize_t readn(int fd, void * buf, size_t count)

{

size_t nleft = count;

ssize_t nread;

char *bufp = (char *)buf;

while (nleft > 0)

{

if ((nread = read(fd, bufp, nleft)) < 0)

{

if (errno == EINTR)

continue;

return -1;

}

else if (nread == 0) //对方关闭或者已经读到eof

return count - nleft;

bufp += nread;

nleft -= nread;

}

return count;

}

ssize_t writen(int fd, const void * buf, size_t count)

{

size_t nleft = count;

ssize_t nwritten;

char *bufp = (char *)buf;

while (nleft > 0)

{

if ((nwritten = write(fd, bufp, nleft)) < 0)

{

if (errno == EINTR)

continue;

return -1;

}

else if (nwritten == 0)

continue;

bufp += nwritten;

nleft -= nwritten;

}

return count;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: