首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

readline非堵塞

2013-04-07 
readline非阻塞/*自定制的read函数*/ssize_t Readline(int fd, void *buf, size_t num){ssize_t ressize_

readline非阻塞


/*自定制的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.

热点排行