Hello,

Sort of a followup to the previous discussion.

Trying to use streamio with O_NONBLOCK and select results in select claiming 
that the fd is readable but when trying to read returning EWOULDBLOCK.


Removing the O_NONBLOCK check in io_select_common makes select behave  (I tried 
with timeout of NULL, 0 and 10s) however the input_buffer stays empty forever 
so it is never woken up. Any ideas?

Here is some example code for trying to read 1 char from /dev/klog translated 
with /hurd/streamio kmsg.

--8<---------------cut here---------------start------------->8---
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>


#define _PATH_KLOG "/dev/klog"

int
main ()
{

  int fd; 
  fd = open(_PATH_KLOG, O_RDONLY | O_NONBLOCK);

  if (fd < 0)
    {
      perror("open");
      exit(EXIT_FAILURE);
    }


  char buffer[1];
  ssize_t num_read;

  fd_set fds;
  FD_ZERO(&fds);
  FD_SET(fd, &fds);

  select(fd + 1, &fds, NULL, NULL, NULL);
  if (FD_ISSET(fd, &fds))
    {
      num_read =  read(fd, buffer, sizeof(buffer));
      printf("num_read %d\n", num_read);
      perror("read");
    }
  close(fd);
  exit(EXIT_SUCCESS);
}
--8<---------------cut here---------------end--------------->8---

Output:./select 
num_read -1
read: Resource temporarily unavailable

Reply via email to