- int done = 0;
- while(done < len)
- {
- int ret = read(fd, ((char *) buf) + done, len - done);
- if(ret > 0)
- done += ret;
- if(ret < 0 && errno == EAGAIN)
- {
- fd_set fds;
- FD_ZERO(&fds);
- FD_SET(fd, &fds);
- ret = select(fd + 1, &fds, 0, 0, 0);
- }
- if(ret <= 0)
- return ret;
- }
- return len;