readline非阻塞

jody_go 2013-03-15 09:13:00

/*自定制的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呢?还需要注意其它什么不?
...全文
82 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
woaishuo2011 2013-03-15
  • 打赏
  • 举报
回复
read 在非阻塞状态下如果没有数据可以读取,返回的是0.

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧