[comp.unix.questions] Questions on asynchronous I/O with sockets

costello@mbunix.mitre.org (Costello) (01/23/91)

Hello, I have a couple of questions on doing aynchronous I/O on sockets
(1) I have set up a socket to do asynchronous I/O as follows:
           s = socket(AF_UNIX, SOCK_STREAM, 0);
           fcntl(s, F_SETOWN, getpid());
           fcntl(s, F_SETFL, FASYNC);
    I am finding that during this process a SIGIO signal is
    generated. My first question, then, is: is this normal?
    Should I get a signal when I set up a socket?

(2) I have this socket (s) connected to a socket on the same
    machine. Let me refer to the process that contains "s" as
    the client process and the other process to which it is 
    connected as the server process. The client process and
    the server process are exchanging messages back and forth.
    I have made "s" asynchronous so that the client can do
    other work while it waits for a message to come from the
    server and then when the SIGIO arrives it interrupts the
    client which then reads "s". 
    I have observed that I am getting many more SIGIOs than I
    had anticipated. I thought that I would only get a SIGIO
    when data arrived on the socket, "s" (ie. when the client
    got data from the server). Well, I seem to be also getting
    SIGIO when the client sends data to the server. My question,
    then, is twofold:
       (a) FASYNC is supposed to allow asynchronous "I/O". I
           guess that I have always been thinking along the
           lines of asynchronous (I)nput and not asynchronous
           (O)utput. Does asynchronous Ouput mean that when
           I write on "s" a SIGIO is automatically generated?
           What does it mean to do asynchronous output? 
           Asynchronous input buys me the ability to do
           other work instead of waiting on a read statment.
           What does asynchronous output buy me?
           A SIGIO being generated whenever I do a write on "s"
           would account for all the extra SIGIO signals that I
           am seeing.
       (b) As an alternative explanation to why I am getting
           the extra SIGIOs I thought that perhaps when I set
           up "s" to be an asynchronous I/O socket then the
           socket to which it connected to would "inherit"
           this asynchronicity characteristic. So, when the
           server received a message from the client then a
           SIGIO would be generated. So, my question is:
           if "s" is asynchronous then does the socket to 
           which it is connect automatically become asynchronous?


I am working on an Apple IIx running A/UX 1.1.1.
Any insights that ya'll could provide would be much 
appreciated. Please e-mail to me: costello@mitre.org
Thanks. Cheers! /Roger