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