当前位置: 技术问答>linux和unix
readline非阻塞
来源: 互联网 发布时间:2017-04-03
本文导语: /*自定制的read函数*/ ssize_t Readline(int fd, void *buf, size_t num) { ssize_t res; size_t n; char *ptr; n = num; ptr = (char *)buf; while (n > 0) { if ((res = read (fd, ptr, n)) == -1) { if (errno == EINTR) /*中断*/ ...
/*自定制的read函数*/
ssize_t Readline(int fd, void *buf, size_t num)
{
ssize_t res;
size_t n;
char *ptr;
n = num;
ptr = (char *)buf;
while (n > 0)
{
if ((res = read (fd, ptr, n)) == -1)
{
if (errno == EINTR) /*中断*/
res = 0;
else if (errno == ECONNRESET)
{
return 0;
}
else
{
ibslog(2, 5, __FILE__, __LINE__, "errno:[%d, %s]", errno, strerror(errno));
return -1;
}
}
else if (res == 0)
break;
ptr += res;
n -= res;
}
return (num - n);
}
我们再socket通讯时,一般都是加工一下read函数,然而当是阻塞模式的时候,这个没有问题,
如果是非阻塞的话,请问要注意什么诶?
是不是只需在if (errno == EINTR)的时候,再并上errno == EAGAIN呢?还需要注意其它什么不?
|
read 在非阻塞状态下如果没有数据可以读取,返回的是0.
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。