interrupt driven sockets

Peter C. Bahrs pcb at gator.cacs.usl.edu
Tue Feb 27 19:28:13 AEST 1990


>
>I am currently struggling with sockets under SUNOS 3.5. The basic problem is
>trying to implement interrupt driven I/O rather than use the select call
>which I can't use because of other activity within the same process.
>
>The current state of play is that I've succeeded in arranging to have the
>arrival of data at a socket signalled by SIGIO. This was done using the usual
>incantations for setting the owner of the socket to be the process group of
>the process to which the socket belongs, making the socket non-blocking and
>setting its ASYNC flag.
>
>The problem arises because if I write to a socket and get back an EWOULDBLOCK
>error I have no way of knowing, other than polling, when the socket again
>becomes writable. I had hoped that when the state of the socket changed from
>blocked to unblocked that a SIGIO would be generated but from my experiments
>this appears not to be the case.

Well...
I just got through working on this problem, for the time being as I haven't
completely solved it.  My applications used a regular and interrupt socket.
It is my understanding that if an interrupt occurs, some system calls
will return and error (i.e. -1 for read, write, accept,...).  This means
that ?EVERY? system call must be checked as in:
  
   while  (-1 == specific_system_call(...))
      {
      if (errno == EINTR)
         continue;
      else;
      }
    good part here...
This expands in the errno == part to things like ETIMEDOUT, Ewhatever.
So if I am waiting for a read and and interrupt occurs on the other
socket, I will process the other through the handler, return and read
will fail, but I realize it was due to an interrupt, hopefully the one
I just processed??, and retry the read.
Someone please tell me if this is correct.

/*----------- Thanks in advance... --------------------------------------+
| Peter C. Bahrs                                                         |
| The USL-NASA Project                                                   |
| Center For Advanced Computer Studies      INET: pcb at gator.cacs.usl.edu |
| 2 Rex Street                                                           |
| University of Southwestern Louisiana      ...!uunet!dalsqnt!gator!pcb  | 
| Lafayette, LA 70504                                                    |
|------------------------------------------------------------------------|
+-- He who is afraid of asking is ashamed of learning - Fortune Cookie -*/



More information about the Comp.unix.questions mailing list