readn writen实现linux下socket缓冲区读写
来源:互联网 发布:2017网络婚恋诈骗 编辑:程序博客网 时间:2024/06/06 14:02
转自:http://blog.csdn.net/yanook/article/details/6587542
socket上的read write 操作不同与一般的文件IO操作,socket上的用read write读写的字节数可能比要求的少,但这并不是错误,原因是socket的缓冲区可能已经达到了极限。此时所需要的就是再次调用read write 以写入或输出剩余的字符。这种情况在socket中很常见,但在写字节流socket时只能在socket非堵塞的情况下才会出现,然而为预防实现万一返回不足的字符数值,我们总是调用writen和readn函数,而不是read和write.
下面就是readn、writen函数源码:
ssize_t /* Read "n" bytes from a descriptor. */
readn(int fd, void *vptr, size_t n)
{
size_t nleft;
ssize_t nread;
char *ptr;
ptr = vptr;
nleft = n;
while (nleft > 0) {
if ( (nread = read(fd, ptr, nleft)) < 0) {
if (errno == EINTR)
nread = 0; /* and call read() again */
else
return(-1);
} else if (nread == 0)
break; /* EOF */
nleft -= nread;
ptr += nread;
}
return(n - nleft); /* return >= 0 */
}
ssize_t /* Write "n" bytes to a descriptor. */
writen(int fd, const void *vptr, size_t n)
{
size_t nleft;
ssize_t nwritten;
const char *ptr;
ptr = vptr;
nleft = n;
while (nleft > 0) {
if ( (nwritten = write(fd, ptr, nleft)) <= 0) {
if (nwritten < 0 && errno == EINTR)
nwritten = 0; /* and call write() again */
else
return(-1); /* error */
}
nleft -= nwritten;
ptr += nwritten;
}
return(n);
}
- readn writen实现linux下socket缓冲区读写
- readn writen实现linux下socket缓冲区读写
- linux下socket读写缓冲区
- writen() --- readn()
- readn和writen函数实现通信
- linux下查看系统socket读写缓冲区
- UNIX安全读写函数——readn和writen
- readn和writen函数, socket编程常用函数
- readn和writen
- readn、readline与writen
- readn,writen,readline函数
- writen()和readn()函数
- readn, writen和readline函数
- readn,writen和readline函数
- readn writen readline函数源代码
- UNIX 网络编程学习(7)--readn,writen,readline的实现
- Linux基础----------文件 IO 之 read 和 write (readn 、writen、readline)
- 为什么要这样写:readn(),writen()?
- 黑马程序员_Java编程基础(二)
- [Android] ADT关联源码与API文档 [2013-06-26更新]
- C++著名程序库的比较和学习经验
- 为何在匿名内部类中只能问被final修饰的本地变量?
- 上兴远控原理疑问
- readn writen实现linux下socket缓冲区读写
- 堆栈的区别
- OAuth2.0简介(QQ登录)
- javaSocket与C通信
- MongoDB<一>基础入门
- quadratic polynomial --glossary
- struts2标签库使用小结
- LVS-DR工作原理图文详解
- MFC 位图和字体