From owner-kaio@oss.sgi.com Mon Dec 13 14:06:23 1999 Received: by oss.sgi.com id ; Mon, 13 Dec 1999 14:06:03 -0800 Received: from adsl-63-198-73-118.dsl.lsan03.pacbell.net ([63.198.73.118]:35313 "HELO babbage.xman.org") by oss.sgi.com with SMTP id ; Mon, 13 Dec 1999 14:05:44 -0800 Received: from xman.org (localhost [127.0.0.1]) by babbage.xman.org (Postfix) with ESMTP id 643C238E9 for ; Mon, 13 Dec 1999 13:54:36 -0800 (PST) Message-ID: <38556B1C.226055BD@xman.org> Date: Mon, 13 Dec 1999 13:54:36 -0800 From: Christopher Smith X-Mailer: Mozilla 4.7 [en] (X11; U; Linux 2.2.14pre12 i686) X-Accept-Language: en MIME-Version: 1.0 To: kaio@oss.sgi.com Subject: KAIO and sockets? Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-kaio@oss.sgi.com Precedence: bulk Return-Path: X-Orcpt: rfc822;kaio-outgoing Hi there. I've been playing around with KAIO for a few weeks. Seems very nice. I noticed it's aio_suspend() behavior is correct (as opposed to glibc :-(). Today I tried using KAIO on a socket. I didn't get any error messages, but I also most definitely did not succeed in either my reading or writing operations. I understand that I can't possibly get the split/phase optimization over ethernet, but I was hoping to be able to use KAIO as a generic replacement for Glibc's rather broken AIO. Am I doing something wrong or is this just not possible? --Chris From owner-kaio@oss.sgi.com Wed Dec 15 12:23:40 1999 Received: by oss.sgi.com id ; Wed, 15 Dec 1999 12:23:29 -0800 Received: from pneumatic-tube.sgi.com ([204.94.214.22]:44909 "EHLO pneumatic-tube.sgi.com") by oss.sgi.com with ESMTP id ; Wed, 15 Dec 1999 12:23:09 -0800 Received: from madurai.engr.sgi.com (madurai.engr.sgi.com [192.48.174.5]) by pneumatic-tube.sgi.com (980327.SGI.8.8.8-aspam/980310.SGI-aspam) via ESMTP id MAA06361 for ; Wed, 15 Dec 1999 12:23:57 -0800 (PST) mail_from (ananth@madurai.engr.sgi.com) Received: (from ananth@localhost) by madurai.engr.sgi.com (980205.SGI.8.8.8/970903.SGI.AUTOCF) id MAA142650; Wed, 15 Dec 1999 12:19:53 -0800 (PST) From: ananth@madurai.engr.sgi.com (Rajagopal Ananth) Message-Id: <199912152019.MAA142650@madurai.engr.sgi.com> Subject: Re: KAIO and sockets? To: x@xman.org (Christopher Smith) Date: Wed, 15 Dec 1999 12:19:52 -0800 (PST) Cc: kaio@oss.sgi.com In-Reply-To: <38556B1C.226055BD@xman.org> from "Christopher Smith" at Dec 13, 99 01:54:36 pm X-Mailer: ELM [version 2.4 PL24 ME5a] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-kaio@oss.sgi.com Precedence: bulk Return-Path: X-Orcpt: rfc822;kaio-outgoing > > Hi there. I've been playing around with KAIO for a few weeks. Seems very > nice. I noticed it's aio_suspend() behavior is correct (as opposed to > glibc :-(). > > Today I tried using KAIO on a socket. I didn't get any error messages, > but I also most definitely did not succeed in either my reading or > writing operations. I understand that I can't possibly get the > split/phase optimization over ethernet, but I was hoping to be able to > use KAIO as a generic replacement for Glibc's rather broken AIO. Am I > doing something wrong or is this just not possible? > I have not looked into using sockets & KAIO ... KAIO has mostly been tested with disk I/O. On the otherhand, I can't think of a fundamental reason why sockets won't work; perhaps some code may need tweaking, like the odd behaviour we ran into with PIPEs. Is it possible for you send me a (small) piece of test code that I can use to try out the socket-KAIO behavior? thanks! ananth. PS: I just returned from a long sabbatical leave, so if any I didn't reply to any mail in this forum for the last 6 weeks, please resend it. From owner-kaio@oss.sgi.com Wed Dec 15 16:23:08 1999 Received: by oss.sgi.com id ; Wed, 15 Dec 1999 16:22:58 -0800 Received: from adsl-63-198-73-118.dsl.lsan03.pacbell.net ([63.198.73.118]:60149 "HELO babbage.xman.org") by oss.sgi.com with SMTP id ; Wed, 15 Dec 1999 16:22:38 -0800 Received: from xman.org (localhost [127.0.0.1]) by babbage.xman.org (Postfix) with ESMTP id 7D7E538E9; Wed, 15 Dec 1999 16:11:37 -0800 (PST) Message-ID: <38582E39.4236C4BA@xman.org> Date: Wed, 15 Dec 1999 16:11:37 -0800 From: Christopher Smith X-Mailer: Mozilla 4.7 [en] (X11; U; Linux 2.2.14pre13 i686) X-Accept-Language: en MIME-Version: 1.0 To: Rajagopal Ananth Cc: kaio@oss.sgi.com Subject: Re: KAIO and sockets? References: <199912152019.MAA142650@madurai.engr.sgi.com> Content-Type: multipart/mixed; boundary="------------EC22C4346189CB0DA2B68A8A" Sender: owner-kaio@oss.sgi.com Precedence: bulk Return-Path: X-Orcpt: rfc822;kaio-outgoing This is a multi-part message in MIME format. --------------EC22C4346189CB0DA2B68A8A Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Rajagopal Ananth wrote: > I have not looked into using sockets & KAIO ... > KAIO has mostly been tested with disk I/O. On the otherhand, > I can't think of a fundamental reason why sockets won't work; > perhaps some code may need tweaking, like the odd behaviour > we ran into with PIPEs. Is it possible for you send me > a (small) piece of test code that I can use to try out > the socket-KAIO behavior? > > thanks! > > ananth. > > PS: I just returned from a long sabbatical leave, so if any I > didn't reply to any mail in this forum for the last 6 weeks, > please resend it. Here's some really crummy C++ code (note I basically cut and pasted from some class libraries ;-) which demonstrates a failure on a read of a socket. If the code works properly, it should emulate a VERY simple HTTP server. The important thing to note is that if you set KAIO_READ to 0 (and therefore don't use KAIO) the application appears to run properly. My observations are that with KAIO the program reads zero bytes into the buffer and does not block at all on kaio_suspend. Note I have seperate code doing this on a file and it seems to work fine. --Chris --------------EC22C4346189CB0DA2B68A8A Content-Type: image/x-xbitmap; name="aio2.cpp" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="aio2.cpp" #define BUFFER_SIZE 100 #define KAIO_READ 1 extern "C" { #include } #include #include #include #include #include #include #include #include #include #include #include void socketTest(const int portNumber) { cout << "Initiating socket test" << endl; int mySocket = socket(PF_INET, SOCK_STREAM, 0); if (mySocket < 0) { cout << "Error creating socket" << strerror(errno) << endl; exit(1); } socklen_t addrLength = sizeof(struct sockaddr); struct sockaddr_in* socketAddress = (struct sockaddr_in*) malloc (addrLength); socketAddress->sin_family = AF_INET; socketAddress->sin_port = htons(portNumber); inet_aton("127.0.0.1", &(socketAddress->sin_addr)); int returnVal = bind(mySocket, (const struct sockaddr *) socketAddress, addrLength); if (returnVal < 0) { cout << "Error invoking bind" << strerror(errno) << endl; exit(1); } returnVal = listen(mySocket, 10); if (returnVal < 0) { cout << "Error invoking listen" << strerror(errno) << endl; exit(1); } int connectedSocket = accept(mySocket, (struct sockaddr *) socketAddress, &addrLength); if (connectedSocket < 0) { cout << "Error invoking accept" << strerror(errno) << endl; exit(1); } char* buffer = (char *) calloc(BUFFER_SIZE + 1, sizeof(char)); #if defined(KAIO_READ) int reader = recvfrom(connectedSocket, buffer, BUFFER_SIZE, 0, NULL, 0); if (reader == -1) { switch(errno) { case EAGAIN: cout << "Non-blocking" << endl; break; case ENOTCONN: cout << "Not connected" << endl; break; case ENOTSOCK: cout << "Not a socket" << endl; break; case EINVAL: cout << "Cannot read" << endl; break; case EBADF: cout << "Bad file descriptor" << endl; break; case EFAULT: cout << "Buffer is outside of address space" << endl; break; case EINTR: cout << "Interrupted" << endl; break; default: cout << "Error reading socket:" << strerror(errno) << endl; } } #else struct aiocb* control = (struct aiocb*) malloc(sizeof(struct aiocb)); int answer = 0; const struct aiocb** list = (const struct aiocb**) malloc(sizeof(struct aiocb*)); struct timespec wait; control->aio_fildes = connectedSocket; control->aio_lio_opcode = LIO_READ; control->aio_buf = buffer; control->aio_nbytes = (size_t) 1000; control->aio_offset = 0; cout << "Doing read" << endl; answer = aio_read(control); if (answer < 0) { cout << "Error on read: " << strerror(errno) << endl; exit(0); } list[0] = control; wait.tv_sec = 100000;; wait.tv_nsec = 0; cout << "Suspending until complete\n"; answer = aio_suspend(list, 1, &wait); if (answer < 0) { cout << "Error on suspend: " << strerror(errno) << endl; answer = aio_error(control); cout << "Error code: " << answer << endl << "Error string: " << strerror(answer); exit(0); } answer = aio_return(control); cout << "aio_return status is: " << answer << endl; cout << "Read: " << buffer << endl; #endif char *nextLine; int line = 0; char **buff_p = &buffer; const char marker = '\n'; do { nextLine = strsep(buff_p, &marker); cout << line++ << ": " << nextLine << endl; } while (nextLine != NULL); free(buffer); char *answer_buf = (char *) calloc(BUFFER_SIZE, sizeof(char)); sprintf(answer_buf, "HTTP/1.1 200 OK\nDate: %s\nServer: Qhttpd\nConnection:close\nContent-Type: text/html\n\n\n\n This is a test\n\n\n

This is a test

\n\n", ctime(NULL)); returnVal = sendto(connectedSocket, answer_buf, BUFFER_SIZE, 0, NULL, 0); close(connectedSocket); close(mySocket); } int main(int argc, char** argv) { const int portnumber = (argc > 1) ? atoi(argv[1]) : 1234; if (portnumber > 0) { socketTest(portnumber); } else { printf ("Invalid port number: %d", portnumber); } } --------------EC22C4346189CB0DA2B68A8A-- From owner-kaio@oss.sgi.com Wed Dec 15 18:34:40 1999 Received: by oss.sgi.com id ; Wed, 15 Dec 1999 18:34:30 -0800 Received: from sgi.SGI.COM ([192.48.153.1]:60435 "EHLO sgi.com") by oss.sgi.com with ESMTP id ; Wed, 15 Dec 1999 18:34:19 -0800 Received: from madurai.engr.sgi.com ([192.48.174.5]) by sgi.com (980327.SGI.8.8.8-aspam/980304.SGI-aspam: SGI does not authorize the use of its proprietary systems or networks for unsolicited or bulk email from the Internet.) via ESMTP id SAA09324 for ; Wed, 15 Dec 1999 18:33:22 -0800 (PST) mail_from (ananth@sgi.com) Received: from sgi.com (sgigate.sgi.com [198.29.75.75]) by madurai.engr.sgi.com (980205.SGI.8.8.8/970903.SGI.AUTOCF) via ESMTP id SAA144799 for ; Wed, 15 Dec 1999 18:31:11 -0800 (PST) Message-ID: <38584EEB.EAFD395F@sgi.com> Date: Wed, 15 Dec 1999 18:31:07 -0800 From: Ananth Ananthanarayanan X-Mailer: Mozilla 4.6 [en] (X11; I; Linux 2.2.10-1SGI_11smp i686) X-Accept-Language: en MIME-Version: 1.0 To: kaio@oss.sgi.com Subject: Re: Updated patch. References: <3858419B.ACB141C9@xman.org> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-kaio@oss.sgi.com Precedence: bulk Return-Path: X-Orcpt: rfc822;kaio-outgoing Christopher Smith wrote: > > I noticed a VERY small problem with the KAIO patch when applied to the > latest 2.2 kernel. So, I put together this new patch which fixes the > problem. Let me know if anyone has any problems. > > BTW, has anyone tried porting this to 2.3.x and sending it to Linus? > This seems like a very nice feature (particulary since glibc AIO is both > slow and buggy), particularly when combined with RAW I/O. > > --Chris Chris, For some reason your patch contains extra files with .orig extensions; i gues you had some "saved" copies lying around when you ran the diff. Due to this, the patch you sent out has 8000+ lines of diff, whereas the original kaio-kern-1.0 has only 2000+ lines of diff. I tried manually editing out the .orig diffs, but still couldn't find what exactly your changes were. Can you please sending a corrected version of the patch? Also, if the differences are not big, could you also send the diffs (in text) in your reply. Also, re: your question about 2.3.X ... this is one of the highest priority items on my todo lists. Note that most of the changes come in large chunks, so I'm hoping(!) that we can get away with porting a significant portion of the code. I'm also happy to see you find KAIO to be an improvement over glibc AIO. I hope to get such feedback before pushing the patches onto linux-kernel mailing list & thence to Linus et.al. If you (or anyone else reading this message) has a quantification of KAIO vs. glibc-aio w.r.t. performance or posix-compliance (or just difficult bugs), that information will greatly influence in getting KAIO into kernel proper. regards, ananth. PS: btw, I'm having some logistical problem in trying to use my latest kernel on my test system, so i haven't tried the socket test yet. From owner-kaio@oss.sgi.com Wed Dec 15 19:23:10 1999 Received: by oss.sgi.com id ; Wed, 15 Dec 1999 19:23:01 -0800 Received: from adsl-63-198-73-118.dsl.lsan03.pacbell.net ([63.198.73.118]:41718 "HELO babbage.xman.org") by oss.sgi.com with SMTP id ; Wed, 15 Dec 1999 19:22:52 -0800 Received: from xman.org (localhost [127.0.0.1]) by babbage.xman.org (Postfix) with ESMTP id 04CE138EC; Wed, 15 Dec 1999 19:11:49 -0800 (PST) Message-ID: <38585875.5BA30E15@xman.org> Date: Wed, 15 Dec 1999 19:11:49 -0800 From: Christopher Smith X-Mailer: Mozilla 4.7 [en] (X11; U; Linux 2.2.14pre14 i686) X-Accept-Language: en MIME-Version: 1.0 To: Ananth Ananthanarayanan Cc: kaio@oss.sgi.com Subject: Re: Updated patch. References: <3858419B.ACB141C9@xman.org> <38584EEB.EAFD395F@sgi.com> Content-Type: multipart/mixed; boundary="------------9E14815AB428721A5BC99D99" Sender: owner-kaio@oss.sgi.com Precedence: bulk Return-Path: X-Orcpt: rfc822;kaio-outgoing This is a multi-part message in MIME format. --------------9E14815AB428721A5BC99D99 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Ananth Ananthanarayanan wrote: > For some reason your patch contains extra files with .orig extensions; > i gues you had some "saved" copies lying around when you ran the diff. > Due to this, the patch you sent out has 8000+ lines of diff, whereas > the original kaio-kern-1.0 has only 2000+ lines of diff. I tried > manually editing out the .orig diffs, but still couldn't find what > exactly your changes were. Can you please sending a corrected > version of the patch? Also, if the differences are not big, > could you also send the diffs (in text) in your reply. Patch fixed. It just takes into account a very minor change in sched.h, as well as some line number changes. This one is almost exactly the same size as yours. > Also, re: your question about 2.3.X ... this is one of the highest > priority items on my todo lists. Note that most of the changes > come in large chunks, so I'm hoping(!) that we can get away with > porting a significant portion of the code. I'm also happy to > see you find KAIO to be an improvement over glibc AIO. > I hope to get such feedback before pushing the patches onto linux-kernel > mailing list & thence to Linus et.al. If you (or anyone else > reading this message) has a quantification of KAIO vs. glibc-aio > w.r.t. performance or posix-compliance (or just difficult bugs), > that information will greatly influence in getting KAIO into kernel > proper. Well, I can safely say that glibc AIO doesn't seem to do aio_suspend() as it should (it's never successfully blocked for me). I didn't have much more luck with the signal structure, although that's conceivably due to coding errors on my part. KAIO hasn't caused me one bit of trouble (beyond the pending socket issue) and of course we know it performs well (I haven't reached the stage where I've quantified that yet). --Chris --------------9E14815AB428721A5BC99D99 Content-Type: application/x-gzip; name="kaio-diffs.gz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="kaio-diffs.gz" H4sICHRWWDgCA2thaW8tZGlmZnMA5DxrV9tIsp/Fr6gw9yY2tsE2hPDYyY4HTMY7xHAx2WRO NkdHltpYa1vS6AF4d+e/36rqltR6GJjd++HevTlzjOnuqu6ud1UX47izGXTGVhLC0vWSx04U O3vnvp2shBdbset7e2e+N3PvklDszsUykMueXLLV6XReiM34LBw4Fzb03kLv6OTt/km/D73j 4+OtVqv1gq3K8O9O3h5L+B9+gE5v/91x+xBa/LO3Dz/8sAUAE2sNv8BchAJiH4RnTZcCoiQI /DAG14N4LsBJVlOIROhaS3BC916EtFYtIiS06KdPPx6CbYXO7hZstQbR2rPnoe/5SQSjvats devsanwx+mAORldbLYAhbxhlO878EK79yH2ECoYLy3aXbuyKaBcQGtwMSjiEyvfAWi5h5iK+ dRSLVdTGC9jLxHG9OzyiH+EV51YMc+teqJs6cGM9EHZC0IiEgO2JOkmIE5Ztiyiiy07OJiNw 3GgBjrh3cXQbEs8RIcFt86Q6y3Zzd6u1Bddno5xA6so4RsS6cD0H/CSGh7lAwoWw9hN5JovB Vj6NTn0iJQ/gRYnAnrUS4M/A2nLqxNQK7fmeu390uGezUOwi86TI1MyUhLJmhfER6TlI7gBQ hPon3YOT/aOyLNaBPSmCb9+SAOJnr8viZ/srkmV480F4IkTpikScBG9QgGDq+0t4Mxbxgx8u iIGKmm9Sao6Ht1stuWqTsGVrWdjcGXyF7f/Ih7bhe9heb8O3U6Kvt9UyXDwLvJmw9HQeXEfg RVduTKKFDItiy2NZwi0iHbf5cfAFDrrHh1utmZseXZOANwUJKJ4Dh8rnQBmx5z4KmUSihHDl O+IN/OU55i9E6InlHlI1XO9OKowqTm8Ug+Iy4yJ0YRCEsN+F7tFJb/9k/91mWSjBPi0Qh32W CPzR77FIGLtLH0k8+eXjj1eX5njwcdhAbTY918QfNip40zD2diCKQ2Gtoh7s7P1emP5TMPdo gBZN0P4hYO+4SzCtF+5zI9BW3uO1/w1g+PZvmRD/Ttf6J0nR73aNMiW+Q312xMz1hNPITUJz I0rL9XHyO7GMxEu2paVodWZkE/EI+AE7ML66Hb56BbdzdA2OLyLvjfJq6Kmm6NseLTuGDjwI +GsSySmlbhwBvD06aL+T2obISFHZqZ77hCewPNcmI0VuyfNjskPsNmPabW7RZhJwKoQH0TxM vAUIDArWELvoonBXy3HQmXniAaQnBrrKLkPtbXWM3VAEMYxv0ktGHdQw9Jqtmpl+t4dwL6AT ajQSKqy3jzJqifYiO3L3ImfXVlarMl6yiJX5aoi2f1w2hc8CFW3gwQHxBD970gJ+J4MWAX+w otWeJODu/H15wvV5sFYAbwafm/D6db1c5miU5ZaYUjlrUfjynYSEj4M/Xd2Y4xuOf8zz0eTn rslj+mkkmulyUTzlNt1/d74tJa/fZcnrv23vK0Mfoq8PvdMtNi6/beF/rd9/GdSIForily9f YOTFIpxZ6Cw5isT5U0AXjsKxRiXxSIpDP7mb42wQ7RIYai96/K3WAklgupGJIV8DnUSCykNR JOzgZ4Cb/B0lU562QSOd9zPTD+D77+F15BCQSRibp1stvkKOkqYeLDdu3PsuGos5hg9L0Qa1 xcL1p8kMdhbT4hYKJwOmILgmwy+RaVuEDw0KXMKHDHV++jaGElYIO7gTzrp/E2aMUVfixW1Y +rMZ/raDIQpGyrg/AKHZEWHohxmqSKysYO5jerCDX4PK6flHUHsDPBedSR6DD6B2ljum+zBW iaYNg4n5aTK8SW8rZZJMby4MJAu5DDAXyTiSbURJCMWviUiESWegr1HcaKYRtBoASdUQZoln UxrF8kILIkflN7v1ZmQW7eExZzifGhBtpGQ6tJmq0Tio5HVPLC+ZC1Yk/FQxdFkPXc+NS+ZC Tvya+LFFor/RbLzQPpQMUSID1M0mqjg4dWN1CE5K+/ts/vDnUXojFKMoRokzZ0vrLmrwJ8oD GPZSWKGJCBrXH8ylby+E04bXgXUnUCWzVQ/WQphJ0FATpEckTZv9NE40YtzSRLEwC3uQhgWC g/7SRgRnsAaSi5ytTZo0ycw06BtvqPy2Yc3QMJmJRyfmdekSzQaqDL2vMvT9d6k3MIzEi9w7 PDWwC+TtCfSF1DAwpUoXJUHsO1YsKsueIE5OnedpAmQDDCMI0Y4sGtufBzfj0fjDK87WFQgQ AHQf/zP4i7fdhpRWhvGbRrANLKTLYCRTEQukhNvAb5tUNnADoSus/L2qrnK8mvge9GqUVS1+ UlVRtI+gtZ95diNKLTDa5Aizvq60yfIbJicOfVMeETgNJNtNW6FtICnpPCfHZFrhFXqm1FHR 72gwd9IJbTwLQ2EjaFPnihRW6Awn16Pr4SlHpAQIr9iuQxPUCrwCXf+4j1Fm6/jtU9efhUJd /yF04xgDSv4FfcP3XVb5MgX+F97/Ff1q3gwH58ObSWPH9TBTJ2Wg1NHzma8YDpKj2iShtMQk AhTkVB+tSqs+W+Ng9mtk9imQouRyVt5v9/qySrgDG06FU3L6zA/WoXs3j6Fx1iQ8vTZ99gEu ETCCWz+8t5ZORGEXR2w/k1FY+UgR1+ZaZnTC40aOiU7Thom7dG1UyQ8hxiGujYHDyLN3MzzG ZyU3V3bsT9GpExRM13Bj/dW68wNrCQPP8jCD8azQWuOnBw2LR5qMoPYfpjsb9gWuHlS96wrj TN9Gt6ZMOVOwd9Q+rnXS0Spgky198WaH+k97aUQaUY3YTsM8RGIly9jEnEqIRSXMFVk8iJ/o MtocC/rICNfD3Orv0p4dHbb30aChSh/JexnKq8maT0PzaWQLTjcH9fISPIUzcD788dMH/E2l HY5yIY9NkN/gMUuZq2v01AXph/RYkJOhC6iEm+Nje+W02T8VHaoV3vU2jPc3jO9vGD9QYTBH 4yKWxpzS2hKNWspY4YnI4CAtzj6em5PLwZ+HyoeyWbGTMMTkvPNe5ifezE89LA/8atqoi7Fo qHXSj1Y5QoOZ6Rpf3SIHxqnLNZg/RvTgxvacDyS3sK1IpOciw3ZSGvt8M7od0iCfR95V5iMP hKSNKub69pTSiyYTGLryJFM88uJUblzAOPk0uR6OzzOcaDsJX5REFDnk6JZuFH/91gZPUCZB BQc/iZuyhqMfJAXMIdOT5Iw1UjUgNLjclqfdR9P1zGnPBuOz4WX5sLbl2UhzYv8MaZDtzF+a p+qQfLyFWOPMAn9IcWCO08nIWdloAs1Z6K/MJBJh4zUtw1irUSRqv9l5r1DJMMKfNXLczSwc k0TpDC8Gny5vpThk9+KL6WRTV6A7aOSCPwLwKeDkWUZejia35uhKow19oqFdInrinlJHqmdr NEJTi5mZ4q6CMFiTJKdR1cQ9fqO1+F0eosp2QmDiDtoFUibzVkoMUgFAU5+u3KeV2iZNVujC XWtue302Gv95cDk6H2j6UDCu/ENj8qsGj2MkcidiYnmvyirGWcsq10M36lIQb3KcwflExCgp ZHG46t5578hZefxZkMS84jkVJAN0kolotMRgWxmQPLBrGcqTnOSU1w5MOGsskO4T8rwe8rxe ZfK1AZLydHto2zv8woDRoYfeDtKEt366FDJtWibj/QADhwPoHZ70j056/ND1ToudNsI+/eCK 2dwBpbbHmAZwFCBdl4FW+OPwfPTpo4FpLxmPsQ8r4bjJCmYYSXNdOV8sl97+cj3E5Qe0/HNI DkdBxOtAyJjkiWBB+cyhtFvDc8T0ljDxyxm9Z52AH4iQAzGQNiAtb2/gFJUBpNd9Gc8SDzXT 2cy0dP45rqXrmPR/wmCu34Ve76SLnDsoh7xPA2/m2/EhB2/4I62xKPqZ5vjGRG0KVtGdYfSO jvlZyV8JTG/9ALXasuOEC44PFkUf8sFJZ6dEwa9MiOC4+yK2MQyqpGFQNVwrxODu5CE6927k 0rs9l9TAS1ZTSjisUKQv+KHlYUTU6UGHxLJ/AvTU/YeyOL9PY9tsX1VdN1Vhj2SNEtWouekh MiW5FpSWmKHNbOC1tiJj1H6PlLPbxf+QUYd1XK4Dq+Vvt91F7rb3u9wDQeT3KAZFzzX+9IXf c3/SaF8YVeXmAUjjBu4KuZ61Y9Dr/PXVZPSl2rwwk80La2hQ4tPM85ffme78y9kOupTNyY2s iWfX/ISyhcEIJhnoqiKtG4JsAG4a0fXXhSYLeiLifJfd3q68Ym445laUvVEFeAQ3RngSLeSX VoeV1M3PQxryKlUR0/x5eDMeXpomPwu8elJ1tL11zXlBSpJvoydb/CRDSdEsTbdkUpItQI3Z IzWh9A04MuS0qg0itneJ+oZ8NMzWYwphLXGxfKLOApAcILfCGmvOpROG17CyHt0V+gGp9SSC 8Zxy9JTQaCAcJmwQ+sQ/5BNjCKwQeUr9JK6fVsZ3YVzBgt6A0NhzMiEOopOMFoxEePcuSjk3 cdxbocvdQ1Ox9B805ilWkArd/kTZhDkc/3l0czU2tmlsLAcn28Wl5zJgVSATMOCguODj4Es6 aRiHB5WtRh+HE+OoVpzpThyQoMwdHnSmbpr2RmQwZaA4XauCRGYJLkaXQ/Pq4mIyvDV/HN1O gDaFHSNn5gzzsSQUMnUvzBSTdET7gGo3hwd3uZQnodYlirp26Lkif8lCHkrHLHBtPC+dVuoX f1wkIbUNtXPjfTm4+TCkMx8emJOrTzdnQ7md6vG6vJigg1qT06JtDw8a0kLkm+/CaEXtK+TK PD8WJ4ULQjT3k6VDsqFu6YDF9R1W4ZkbRioEJpJKumPMn1CpIdVza+rLR2tq8sElmMfaaBHk tSaiSFGGmslrou7GlruMcsM4IBLiyT0mlbUmrM+xmJ6F/BPJKU1yND5XOFzh48RduUsrRDNG BNU4p/Qm7TNT4lTYSOPQc9vwx21mGvGueMeIlDsqXg/VcJkw72YcG0jCU5MA8VApLQtAkSpt ZsjSnYZWuJaCEiVujCvX8DcR+tyxRksCyyFbn+o32Toyl4UkSxVB0NWgaKEMOCI6JfN2QeKA v9ihG8Q+dxGicCNfV2yFECG9Q9IDJ5o9gqWiLwGS6r6JAPMeC+QzGXDyxvmfrCrLzbzpOlab jf1dsmM8wHEQBkERQypA3QeY9OxY5HwT/vGPbL4iF4VZzSVxtYcsvjyPpO5p3vBRncsIE/iR y2EEG+47/ch8T6qFG4YpX2As56vK+eV2TQzt1ID8/Vv+BKUxAw19ELq+JKrHvqGT97PoNE0d EYOlvyrCxlnVFq4CLt5mRM23onzfD0j8TilQzdN/kKPaboVKmjqnPNLXd99OEVi2piTcwYla +xQk13K+Zh6AyPBbWmbgNLyO8ZomVtiuz9XL++HB/xGJrxPN7JTKfnTQMAAahqjK0f/PwoNO ND6tCcS46wQjOPY3c3amqRVVFlKz+Gk5FVO/yrgqgGKOV5mSWbth7Ncgu/10MzaMg8qMXpgy ONfPS0fyEda27LnIbGHpMFQKwqiK4DDfRf/N1SASKnqMZVecdlPUgHN52DDeVSY+DMfDm9GZ JMIRFNrwCKebUhO5teFoqr5oGMcaFy4Q9s6iyICjU/TJ1DFMWRnKjJ11+2ioiL94jP/6NJzc Gka3Okdb9KrDZ1fXvzCPKllJjQPR05OqB8lOf02RuZNQA7QWfeUdSqCk2nJKtUz+EVCFLVvF L3Mbl6kXWIVPNutsxmiUi9ps19rwHMiMsl+G8IPnV6eVelkBLq6uVIUNyEvCBYC8hJ++CaRU qa07P7eNVnhWfVDKiGXV5zTzgzRdvBmej26GZ7dbLfFIUswnzYf5SYSZ2MbRa2iUKM9+nUjT 5Ko4rzzkAvQT6JjbL8PHS59EmBMqxShXMMW43E7/yrtI2plkdOPQtemrXsWnfxLNBnIWIIm2 eN78JIUD47zqIKiSlWT5pYSltc+SVsp9kRL1CqBtkF0ZtAehZ7dSGqBDy11T6v4+mleIng+W EOZKU8CValDlPuqg8kKl99hUZjXhLU6yAOqimE9r7l1nfRm5TJQ1FhYXSGoXCF9coI5fvEru 07XqkAbENdWG1TQa9/4SHQontHETR+TzWxZs9L9lBl2lVlVj/q9EngVHgOl6KQLd6AyeXFp1 CM9hNnT6bnQL9WDsGBRU2TUUISocQCjkgc6QigfBJVV1IbT/s15Enb/qR+q3eoknKcWUN1LS ZSbPcVFO85pQxsxedUoBi0mv/dlcMa40B5eX51fjIUeV2c6XUgnpblFpo0uE+TwY3RY2ueRN 5HBfJldFTDJar8NViYN5Axk49ss7XBvqnDXF2Y1N49UmGe4y5pKKHr3Leo14RL7HFIeG/ir9 s8C0kzylujTizNONTeO5sc/XlTrBK13UGoxcUWruLnV2p13daUt33szNjdxG2spd18Vdu3cu gqX8diGLDXeCKt6c5WZJE+dqi8A1Xc8Rjye9/mntLAF7/kmf345rsRo7tM7D+3O6VZhUOfum U0V8JG0U/aN0WIjTlAOn/DdcU8teQOCzSYbUqclste5MCM34v/a+cQKaPeytkmXs0lNftlT+ 8Syh0s4e1R98mZXHosCVz+RoW6TTw19OOSMKQj9GUYzYbMDK8twgWXLCXMiT8buEpGUSMn8D oIO8iWAqKBGySPSQJzWw1LG8Adb26XEL4YwSpQibyV32QP04Pks2J/ecGzI5SG8UAvUwhgsL WFIzSNiXepUA8aRbE6h8IAEidZv+LMny1gU8sRUtTPWdT0MDfBqVoHJGiGNGscrAm5Kh47X0 RT6VuF6W2aYAv0m+bZZFydMU86JUA2Kd1Qr5eCk+hqr6LPSyT1It+xQqPgut5KPVcxaFWqNe gFm8qAIjX5nYXilk9spRRMSQbg9k8JYvU6vYF58WhlwJl3guEhFcRxX73UhRyigrHQ0x5Fza AIKeW9EcYi5TK501auFSwCAIxf2TkAirK6fakn9jOHLZLPyyvi6NC2pJ6cKehJAaI8ttBQij ChLYczdWIJPbwe3kRKu/AM0pECv2V66d8kw1zJ9qO8kt0k56dE/GRrVkFDV6iQr0IvgdvYmu DhHKjr6koJLchEXPwEhAKRP+rwyuOCJjGt6KzZPrg7FRpRnBZp3WNAnSey/kbvT9VyDClaH0 zUg7c1Dq/ZZyJOhta43mRjZqNVPhV6VkbbtEuRmlvipNy8Q+tSbaW3ZtsMLFsMFnGXa4uH1U tJeZC5d0FytpXHAbKm3iUUMZs5Q0RXp5I2UEGRp4EpADEOqtk/vYkh627y9coTr8+T0rBUvL dFkIYSxTEu2onjwmD2GhqJBhME6OQ38JU3J7mV/OKET2lRolTFaYSql2saFWmwaNikIxr2ks 2vCI7GssmqqVVkI2Hpvf0rZBXtes5LQ1ePSOqPyE6uS/KcOUvTTUxS3URpk+F8gBNJmpEGcC nEUT3M2ZPlxoWRGOG8Vqd5cTUJn54SyGLsX53reUwAk3vGQGnDjjcJGc25ZYiHkn+Rwln6pR kq38L+b0aD7HU8mHq/l7cc3+NzqPVhpJm4jThu1S6aOdemI9ZM4B0+5PPWJWkNQz7JYbSetw VDqOc8hyjsjjdTjymmlbY2JhP9ay+j8gU/uwk6gHIc5wKlE7Kxs3N05nfeN11rZ5WsjirkPk 32P2Xk//CxLuGZGvAapFpJTcSa2gBwT+Q23D2KZtnc72xiWXw7FxyIKZqVae4KUyu7EPUYfS mrWebSdVf7ex2tChRhNPNqjRgpo/vNnYhbgZqtR+KP8gnH4cF7oPrz+Yk6U1pfTuuDAaPViB KZ9zjF63OPXf1V1bcxu3kn7m/oqRTkXhWCQtOTdHjJxSEtlRxZZ8bDmbs46XRZMjeVa8iUNa 8fr4/PbtK9DAYCglW/uwqYolzWAwmEaj0d3o/vqqXMAD+/t3CDMMk/vgoQc+ncS00cULFvk+ J95mz4ZXoFoAy8IaX5UMD4Q5gz7Io9fr3XFCKviMccOcyL2N0yJtEjPzzeaZaXjw4cGXD01K 34OHODn4Q7La7mNcBmnJl8v5eoGHriMCrMFYStQg1188wGArFDnFH8UIFWR/oyomF/7yrmwq Dg6pUWWQlDfjLEADyWSdfupLUnQDycvV/emwnLl8M3OlRl53J0HUh3WiNjaPw6O/2efUX/gp eFSJL/37q7PzI4R3GGMCM4m+ASr5lGzkXLeNFKLA+s0C1EW809Vcwthd3h+wBZjpb9eXFec3 aXorR3oi8tF8OUWBTyyPMw+60avTk8cnv/0+28ZH0nOgODl/lCs3C8G1aB6Ce3eZiY0PRJmq 39JU4A+ZidZwNFoNJGawPeJkgswRBdTPAXbcvkNqdXVVT2GqzQh1VpsR94pgRgZ0fTCdYt80 LHiPvvj5/t4eyMAWN6lG0mbTFGA0djwFfC09BXyvdQ6W0tkIA3ez/W8O9r882HvQMAXywGYo pG8ZIQN+MDYLfMO9BSio9yS/i7JfcR3Mb2btHZccNp3i/7ABwJQQf8YJedT7199SZvk3e3tu gl0PlL0LQvvRo8NsnzjcXzvM4mZ3SMJtTFyL9SSkS1INcZqV4wRqinAWYABICniNLxQe5ww0 dYSggR1JojKW61mX7E1QYsFYnfJ+xa01eF6bFuwIIDwIBl9JM890eh9tRyC94x17KWIde+su i3dT+3SuriD63WslxqJ5urU03S8pTferVJpu9v86T5ffiSGzweBhZ728hBlmC/an+foSBjD+ cIeEX2AuovZXvP93HnyVQOtZXJLrKQF7YVEy/kJar7OKOTTaZsu2hhUoZKt28QeoX1UFX4m5 57/LWtyy1/VGiyWt7GSoaQ+OX7zgW61t7g+tvN+3P6t+384uhsBI4wN2ZPI1NMRAHfxsTDAO /ODf/Jv00oBDXgZ4jA66OfyW9+nWJ/z3U/0QOfgUGnPqXBZNo/kFGPCt9h8gtrLnR0+OBy9/ Pnl8nm/MWBKMmJfvQB1DKbBYwHZd+SwOuPjFXm9/v4cro5edrD6nqFkweymnR5AIPxSrDvWz eod4Qj3ii4d7pBg+RLSHBw++ZhGLgX/dR+h/2T2koxqTHy1/3pYgLVnc0aFIpq5P+IY+pxk8 h2UzmRQUiDaF3RnuvGaDX7oI05VZqqIiBS2rK8lVNm8j49d5WLEdsbZv5D2c/u6Av6reRE4X cIPJyBMkjuErcv61zDDNM0vquRi7ROrInRKdo5C/j89Rmtxm6DVL+SnpUefH5j/B9GW3jD/1 lzuDGdm/VeNrrllB4beJH4dhidiTE9jBJ6ePz9q4++VZu22bgjWe8Q27kxrrHBn756OXP2fn Rz88PRa5fMRpObp5ZQRjyQ5xoSa6bq+znYy99T2S861nc932yopjxofj4cKdh+JuKOcR4rd2 fnaSta2jycSnEFZ6hsViVjzkBHgQOQsGjoEuZu2r6052BXKp1W4rs+Zt8/vVdf6fbWyQw+hD /s0jpx1ZCK6/iEtfB2+FZnmHu31jVhxKSIUGU5uDH2fh6VP958uxsDYtxB9Z+8GzQknNoQZs ALtziGjNwOPt/VdPs+++49Y5Ol9Iqp38x3F23+Z3e/dX3BN24lpgpjNI3ctiNUCQFUkUfvL4 +eDo/OzZyY8deRH2o3tF1B/h/xAeYHv7Me0BKFwI6ALPsWjtej5gY2e3BcKnKlbtqK8Owrok v/xe4uOirxMJlXq8u6+4aPV5Ax1QGMH1zL/J5PnL967eLfrBFTmOdtd0CY51HCzRdnfJ7//b b78dZO/mN+jsWANHvC+WF5P5zffswYfO4akdz5h1BbmTRa8hCuAg0ALg0cVj4fMyuH/66unT fv0uHYr52zLJ+Iyo4+ne5Mtb9PZaZzuJhzTx+x5/qBy7Nw/IENsLeaBkOJF+LmQ6YXWb+VSf KsIS4Hy2Wg3zJ5/lqe+lriJndAiJQcZ5JcTH7and7we0wp5X04WlEi0cImqUry/vheY1YrFd 7G6UBAMSDYF6w2MS0AMLekiUI/8c7g2GhxCR0HZynUfjqKf/iy6isReG+rCrojA1q2lZTIGv 77qg3FwnWKDvwJrgjxp9zXwl+Czm4TSXute0blkyjKrgRuvesnkp0VMh+3a7SkB1nR+/6J4f vfyFdum/vzp+dZydwbWj85Oz05din1Dgt2ySw0xVmawAyTIecywCbrykD/iESveKH8mPf4Bn lCiK+exWffWX5XuwtpBFetlRdp2x05+OccAOm9LWPqwylwtKqaCchGg28hBCvRDHP/AIPqCt ei47jYcA78Ath/rXrskLlck3GK7aeBqx4p39Y/poGKbNiRFRmfDI8ZqXvQ+kYfoat4hEgVxk 7UgByz3Whcjba+RExnZqW4wVeR9IDtxR+azCIPtsweJj/lRvoXRSU/nYttra0t2zNRav18uT J7+cPH2qTg7GUclkq6EMyzl0eFMSEgTuuJmcNZdLxMNvUSon8tSKUONBdpbvy/Ea7OxpQbo4 He8NJ+V/DzlCh5+xX9fLbt59+J6u3/cb+87VNa8L1rU7imIXk4ZGjnox+1XdY3BJ4YASd73q rI1OTk/OOevj5+Ojn0xLVhLcc6KUi7Hg6HVCrhxQzBEOAYOHyIMEjA3cQUdsTn72+IHHjq6U BTlcr+ZTFIkU/oV0ll2DeFGCDHaA8qAbF7NR0XP0ckODezoqWJ2DAhRokt3thYF7WqAbD0W4 8eypjPNMA08AQ16LaDMvoO3TYTq1RBY5UXE8o2k5AHP2xuUplXiWd1GOSvq0gpuwXXZy/6wj Cf/WOUYkZtklh38dcqihVJlUWD9iVSw5+o8f8Oph1B13QkfNxmyo1qN3KDXMQazKPW8eiuSQ 8UYmE+n8m3YnkekMlXGYHZ+cPn9x9uTF8cuXbltarxh4qf5AJ9J/1vKHa2BFSFswl/KaKkRh NMIRwQ0bcGMbmCAEat6JU5i8whwpveklFOiaspJw+6EVHa9wuku2MvRdfxhpEixJ6ohBgFJd YTTHIhAHFiJoL9pG/13TzWSTQ24bM8ZvLzvFkxfg3Y4a94wwLPUySEGnTnD/YZTzbPgeBC4Z S3Zz7aPyjhjmHXuAjznc9Ly80HdSZTfFZCK8v3Lp1Rn65nmhqD+gQx28LUZDTkCkICxsnBXD 6oNmqitcCNpDZIEPOcyCcv5pRPrNErYMpj0mElF1FhmcB/ARXA6gKI0WeBppCDtA5b+YM8FB DfiQUTgEubLCoTMxYYg43FmXssDbZQ/oTq/FT4X1OipAU8m9CkDHEwS5TDE9yzVpGjfvipmk j5PsrAoczVCjO+k2DBJlfxWt+JodIB9cW/ihpuCdO/dY9f23XSQIpuHTKsdxDtwQUSqFPJlH uFe3rhC2C9yNntV08R5Ci/qFwpKdBjkuJtiAt/9bFk8rXsvuQZE51COhgOGtThil2nHheLw7 f8rQ/cpDufXFl/PVnHjqg6gkobmwCmdHgq/vLp03ExeJGAueHivlsU3qqSsGU+05tgFSz91t Ciwa2ieVjTiL6Q7vLn03vFTeuX+bkazkvxgnSN8Ebt+0ZFrxXP2VdUA2VUb1V9AWIHcio4NQ VHgFN0HNRPEp7pKbdzi+xjUjAdeH2V1Z3ZmNAeHx85EJiAyiZ9WX4+3M0LggdUWafZitTSYQ mfHWe3JHDog3yB/mc45JMwq9M8pCW8tHPfC0m+NY2CzxxEACosWxKY7J4F7orjNHEsb6oece Ze39Bw+h+f7egy9Zmkp//rL6zrKtrS3RmeVQIzK7YjMrcDJCc2eEeD0odtrmaQdHcCoidCJF y9DJBP69x0z/9/ypYKldYrzTFKgxHn5o76ze24lqr973Vu9BcxvR19J/2W7GV0EZGOWbXC4U jY3WQjlv8raIeJOwcUoPD2WLRHLl2aNDsaUIZfQO7aF5ZqEsQ6ucnLEuKsG3MhHkFDHOx/f4 a2/FHlx4lF1ZY9ZxuXU0DLwBSqUC98OCQTcXEgm5B30qg1enJ6fnxy9evHp+fvLD02O3wv/U t7WW6xnZYTqK1fUAS7zpysd4sPVEITA/pUfy4tUpgtzLvkAesjt/2CdT0UNYb3MwKMHlx662 0N1qDwnvLSQozDOLLpjX1GFXTwrfwAhdrhZKxXZ4n9WFBXsZs6ZO/I4BjbJ7hm/v0fpvt9uc t5a3uatuRj/55ZRGlhscm+g8IPaBeP/H63Ex6lD0VSfD0gHrxZtsVhQOAo25whvmwiXwVAOT /ImlcohLi9lcahbUptytc04ldbOknbjjzeAEAzXkAavH7Qj8tnjvg5Eb3GUshqElsCv+EMbC 4b48eXL86wD+PT16Gq5yAbaDn8w25FJv0V+9qqTB4PQH/dLFftCO0CTVevWX6VARXy9yPLy7 KMf1R9alP/vFShZMEXLWtOujgKVV8VkKEaJJS8W8L00wa088rjQpDbQX1jXSCU+p5umJReyu UXmhXdgplXHMPUriOzzMouZCecc15rYXfJYHbAvlh47t1X10PALKbYMR+GRdPly4QictNwz0 2v2kRpIiQayS1IwBS+pYYgmxKZeNf18q7vzlSLc4ySS5t1axknC/9E3KCc9j3G6izfAMv2zE ZCeg5JqSmLY/SBkyGmld7saDoCdQ1Dkli8CZ8ZSpJC7Pyuy78BHNNit3d3OJp3Fnue0djfKg t70u3/S8CH/DE8oznBh3X6HfU7k2FMKHEOSruQCQWzcXpT/EfjC+yNsmC+9Ar8o5WIETdfI8 xI03yORsj1rcMuuOU1YJhsMs6Kz1sD/BZWdfn3PSXM5dKTDBt80q2IvwadoeyCYO3twlztxp 9vaFr/VGddLl2GUY7Gh5h35At8BDMgdLvNFzyLyioqW5GfUkuHRg348ohkF7hz//+U+RIwhk 1CBQSJwEdQnq54SiUFluNDqVk1a52GCxeHZw/L6mQgPOeAJpPCGUyInt8nw2OIv/yppmgD/E 8lMrquxoMYiOl3Zs1Mw0ydMbGV7Rk9NrRnOL3uszgEsxqmpiKwEH331UaoCW6kB8oJPQbPT0 xcsnP9w7SCs5/MKPARN+k6QK2DnQi5Sr8OZzuP6Ualxx8Sy91/K6aKJvfLdeZx605bCaK1lJ W/1eOVuJjuOZe8WFJisOFP/5LKjxZSsgYFzyTSGVOt9xGGMvM4UMuJoQXH0llbq4F1yIePWY kE+C73cA/GdkS79ELHIQvYtidFGC8GWRw52zA89lbLujok20Fy5Bv//Mk6pRZ27VrdY8OC5v PMY4OZP1i0WYIm72ee2lLv80Y+3VGEusHl4u8gZ2L2VyEUUbvvM7XpPy3WGspJbEmS1B4Sou 1LAVwMRDen4n+xfFaz0Do5DDLlDU+xCubuY/g2MYlmCK8urtZlxqqiVPmau+OY/2OxiEaenk ADmTYWhwDTGezOYdkBKrMErpE7HEiAlxgjHgVtht13yxxJDw27uHNO4uUcHomvhXc7URw3eZ k/pIM9SYl/VwC4yXhRfJAGu3dvUhfHU7pr1YZFx9i1BUZyVNIcV2iHjl9VDqur6zmNIlI2y1 JWSB5UlsKzOX335qhyiCzI5ElwONWJAOUc4Myxme52MmFYYXrmcMHYfyuLjsdbLxmk5lmVe4 TDl9lymGUte+O6ltBOZT9yXSc/Yat9LG3HW7x44N3E3D5orb4rgcXqofjXkHr7g6QmEPqr2M Fp2a1x54Qg4zxHHM/SATHj05Ojmlm7bvFFnwfkcefZTtZd/D/wd0NdedUMgh466pFvDZcUVW m8BsS7KGyCGNpJHsPszA51PTSN+haFP0nnYZ4SWrLkaC0155b6onXjEFCjx7dX782+Dp2Y+/ HP9EasdoYWkOI6eyVIeHFq8UyEE/DjICaMqlqGs9voqqvCZYjJvuJMQ6zCfRPtGAYkCaZjvm C/RLEKFaMZFupRKdBgrPsC/HcouGGSSjBv0WV+OOWhoCYjtoAJdRRpsKXNVww3ze+VrAyaSR qPwfHYBLy+mboHsS6Gsnq2uarr+WdNe36BbG5PZRCBRyCVPOZau8D1KQHnAh3ZPfQJjIb4Ph cjn88PrBV1+/6afQRlrsFr13c12LVdUPTRXFcjRIFPFyBHJVntSnGLXNA2OUS6R5a9R4HBFg dopn4jMKOVBQDwx/0XBoPHhfDSnEveUZi9w/jzL4+uD4qkrHlYm7E17IUx+devgobeghDyu7 kayzRnTwKjMTogUZr7xx5dPlKEYydtbfXBsntqHRE29XM5Y8+mNhxMSgVIK7I/gh/WyOkRA3 JY0THp0Ol1cqD8EWh+YUe4UmLMdDcLQRxwlgT57I1kAhXmfrhF+Kohx4B00VRsnytgnZuIUY +Gvh3h1afeWb/DZ1Ru3oUJ3m+VkPvTUbWAzOEPgRU4op7qMgTwPTxtGEIJfxs6W5fPx85ugq mRqYvITVE5BM60UvsiQayshZLwZesV6boH4c3vjLVGhfWY+did2mYeROTXMWnpuLRl+LmnyJ 0TQNh8cjhEdSHlXVeoo8NRSck0s0xobCOcwF2haDe6hhSbGVynaOxi3iMQr8bQWhFLd4Z/Q7 ZFT4KoYoR3Fwk61u5hkmnBYUKCMZ2FQKxDUn3hZ2qIbwPQipozVctNX9kFpOPtxKrU0RabD4 ++lPZFNzK4ioc5+qUbCPqbyZsAZWgcYoLIoRfLumIiPb3L61Ddfh0y/RKhHzlF/w2TjHlENp ltRqmV3kUyV95ReXq1LOEKMT1hBQV0Jug++uXhMv7O6+CVIZnO6v0u65+EKuimJRMeoDrkpM AplimClMSZVR0CmB8PFDRMX1Yj7rZb8Sx0llejr74qhJFdo3GCrGT1FJJKaZJCZPhiADDJAX 9kM108cSxHqENcezagKDwyY7KCPwl/UC+QbHh0cW0pt0JPGy0BsMQzVk8lhUVDDHjQJ2vcvh 8i2BmM0nk2K04kfRk6rP6YB3BD9+tqbSM6sl1ovSfl6/8XLc+5aI/n0fCBKI8tA/Icdcs+FE /RBOO4slOPDj+dGL85f/eNkowLx16mJwg7Pe9JmzKhss8DluINPDY8VSbqvGgXb5f8HqLovK 6TB55ImNTp7Tg7EHz/9XZHAbFtbicZxNehAdee1w/W6ezc8pLnJWoLgaLj/Y3Sg+5OAZNpux EScVbL8w0d67x5c2SRlqa/2BdRc0dqEiwfqh7XUrzlvKj+5vMzo9pxQPoJ6lBFQ8MKLi1Yz0 m9uoFeszDbSyOiCOvq5n1KiWCiuOSH4HKX47adOUjR2NKN22Qp00j0+rKmNUoUaQR1FPJkr3 ADUoznZhDUdxwDNcb5j6j/t6oHJSbVltxjkvjEnI3VyMe9kRFUCiiPWL9cTVxKRc1xa1Jw2V fLndfdFrYYpdiU0NYyeKco5sK3Y/wOOz8YSOpciqkGjYcTGBcSwRfFBfCMtOANJJI9EI/unw AwY4SJINv8Vk2zKKIZX0nExMQQmxPaN6xamsusDKM6Em1qvRIreGy54OKl+7ircLrXh7Mc6D 2Nru8Q9HPz32renNntMb9ciEGpkon0vijb9zICau1Lym3mlgW4nTk7hLGePtPW6lgmA3+A7C F0Wg3Rvf2LrN1dfdh/8dP7pTNBwlPaneDvNu+2Kr0SIApFkuVTUflUOK68YA9YuxsTqiCTPx qCkqEK1Ts2ggym+hgroPW5qHe0M6+4UcfsxH8LZK1eE/SyznVPxLn7WlcXcwUD/0Aw01cNEF dU+rCQlrBMlZsP/HIuLwir2vdk6V1YSB5KCH2VGwD92olVnyIXn1bki1dH59xnPMcfsdp5BS uD580+fclDDlqeJOEfo/zOhAOv74FOZz8Oszmesor6lOyX7cKk548s6ORZAJWwuTdXBSXIbv R8TKoLzAy2JWLGGPwHvsXxgqKbBa6VArJIsVQhgMLGjPCd0VJhSjNim6IEjLEzyG9n6eXcFW UZn8SZc7RUVUUeZPCAiXxb0gmONmjVcloXMqwWzw5KLgrKhW+0GevaANuSKdXhK4aHtqwzOw fHGHwPmkjeptUVC4L6/dIVmc8jHtL8Ku+ORB4Hkrj2YrpHGgEGRT8bt4q6IXOexwtetk2M5B ZLSS3ANIcNbL7egRZnV43LC75ImqtxIz1RuTR+vh8K1aPDy0RR7t2ETzRDQCohBTEiFqE5ye CIuCrDdaGA4S4rqR/WlPtJmEIFT21Zdorouimii+7jNaAwP2KY7CpS12agPdgSEWwxlYjMbQ rNzqbkxmdEbD0/n8ihhHOoS5RADR2E2VSnwUA0ALDs1G00V7h2DJptPXe286MYKoKXFTxxY1 QZof+aBeA280ybaTLbzEd2SqC0/NrSZsSypzG2Qs1HNRt9yJAoG21ZNcc5uqehQtYSkhKulc 225RbcPcRAZ4QTgu1oRIpiNltaQKvhQ3bExPqu2fd03CUI8N7bP7Su3AxY7GEXDbkNRqQqoJ Rc8C7SCWapTLO0FJ9MF7KrgbFDjKsGEaqaUOrv8Ak0OQYfb4oJduf1e/nUIgedNHQIsFh+h9 9FF9jIMn8B2LPrE3/ytAAxbBQLzwdbgDB6jnUB0I5uE6DICxVhk2Dk1dc8VarGpwcYZMXXB8 qkEV/XQ2eHz2vI2le67yLPtIMyq1NH6X4ydUYlrxjbDrrHafdT6P0K0BTHP4N/vb37L5AjUw e7eTQINjzDHfjk4j/Z8uftBf4jNIGBE9W2NuaMjBW9+5I2HyTuOlR+El0PPM98TEzKIPlnDw OmQNRgxwfBqKSruxUTgE6GkkAvfpLI1CdNGzetGWG51s+7Pqs72vxtt1Eenl62KwWKyAoRaC dAJrdrT40DZIj9iTdJm0vGmIouAck1OPINy9tPdFyFEZR8DgclSocDPeailhjcdruJNwTj09 U8AczD9YBYyTZ8XkrTBbdzgJ3+brYbcwFRU1GA9ZrpiOwfBKOUApsZS6ZtKC2IX3UV8K3o9n ARXqiYgb2QNNiUfvRrOYlKvuAtaf1OkeQmsp98FpWSt2O2A/9DbRGxGFSZ9Yz0oK2lKVkshA euXb+epdL8PKHSgdqSOyvBniq3JwwXYYSuA+2P8TD9Y/LrnGtnumXDHVjsZjgnvnfGqqtW1f YeZEVWYu93bD5dTX4ldhCE2M9Rdg16DxTmA7Ih3a9ZBMUQjpn5fBbKHYL/6AjxyV9AmYUMhK oile3aEtAJuiRsMuG59/vM2GzDZzWpvPd2SGKqRQzknIeugAv+cJtZMx1m/LxTHJl97BkVqG KNP3JWhpNZ+DhrjSMKVbFTobbGREh6BjpPRKfXXOaZmyOJkwn3OdFkFyoSHU9VL2TuKzc29Y +QDr1bJc1CEwWEGt6UhsxyVjeTea3rhv5RrnhQ9XtQp7YXkNH+goVbvqTh92h9QDmKx/3sWm i8e5gtULgivsbTQd6wY9wsWYKH97YLbvVESybuEeUCroynRht2YOErtTDxTKc6BqRL1QWMnw hbWzyp9pRc7p4AukFkY/TLwdIUghrrUHQtATIZAWyCRvsel6RGoeHla5J3CVwqdI2QliKhbI gaYnB6FcmgKWNvpPUA4ZF3t8ElpSBJSGhOzcOWKaMSNbosSXqrVHlJdSrCHp1wvXvjYXGZ86 IrcO15OV5YeUg2qvo55NDUiLtLmamKgtNV6BFnwjMkQadEDZ+cnfUdJsDBWwYr6unAeF9gsS 825zw+1uXbFnhPpwVEXNDttSrHTud2k1sbjgGnDXTXcCWz1s9Kv1xUUKDEYD7+xGE1bk42i1 RuABbsozn92Tn5wY7lnC+AXoG2B9zDihLWKZvqvWhUGhHY6vJczMWpT/PdTXOy7avzl/Myhd xcMPErVLidycmcyizYHUaHdDg0eHWZAZEJvwp3NaeNCUcHv6eqSCKKIc/fy2+DCHSSZCF+i/ cgvO+fedO543q1IipncbYlH3ueI7eifwEq5uHIPzKJYYNx0MmoR7Fn0K4SdyyvqhAgaXmF0q v2PINYxh3xrgbXmgi5uxYrYEtEeX4L6v/Sc2qLG93dw0AIdJR/Bqzoi1b2xMra/BjPmjBslD CwjuQj1cA0pRuQpz6GxG707Ykksf7omN4TnYhd/PDVGJkAattBadyQXQ9FmTxBMfdZoEkk4m AeKu25xL7DkMF8+k50vC0MGjIUamweJ55cylWDBibc/6nchryV/ARjOxTkci+X0wed9ksQz4 8IkEVro5LGXszB+zcDj9x3pUDZPExZ/X481lcD65OtGSg0aA7XV3CQ6B5UwqSD4pCc0HffZE EoxOnqMCj8nSFPTBGIFDtP3kMcpR6aGVsixwNQx5XOgkKkH4gxauAZBSv5ptnDHotLjL4yNU UZFsxCHYOew2a19QJBD1Vc7kQZoVUga0UwQAj/2FW54flbYBh0aYtwR5++rl8QvZM30s2Dnq /qP5ejJm73g1KRYrIsklrOwlDdBoM1gqAA9lXVJBL4wG0wmXoZlIKwea488TT8+eHT/rR4ih qSnDOgZ6QkPUEmA1w9iGPsKqwjMg3p4dPR+cvrDjciwdLmmK8lxJEhDdoYc6WROre06/M/tu 4N7gux+XWGDwgu11kP191iqoRzS4CWoOCYNXPtcoSYanfsdeh3mAVh2zEJ9/NigjrCxwllWM 6dqIGJG5IPNyuljSKQqY/xc9skUR3ub77+n1GgexhTENiRxRt3W4Lb5Va+N2NbfdB0fBdwxY 15HwQDKqrUilbjSWgY54bI9BMA/okiCzHx2i6O52dSFKYkyCI2T1/ckE5k8+LoQaBSOPFpvv OOL2V89/Ojo/Hhxh5g1L7oZDV1cUmt0BwkKEY+oOAYveZS/wjOS+xsUvvMEi6v+yfKuQqRKe p459D4k6RBbpkh+C6eunTPDU5FFXfFgdFWP26cgeR0Yd9GcV4B651NRZRKEv1A7LtIcOMP1Y 55lytTnHoZNug+p9Uf1vUl5U+yovxHoQn9uOnKcuDLRd6cwNcffjBjNfLzNEo1toCQSeL5DW WEGiz/CBiE+PZODH+ON36BZZbhjJb1H43vJRDB3Agnzgw1d+Fst1rXESnC8Nj3GRqtHRdz2P Zmcns65t+lxoojOHFKPpS4kG6i7lSbDwb0ljyJo/deA3A1N1F9kR4GpYn/Dy5sAvHb9iOHRd qOwYqYVf03Kf8xG/o0MeiU8gUC5nGMpKk8NRT+wRlIwUeIxCt6vFcIRlCih1kRZUvPx8SDSV xZGHMSVhvuKIVIpk8AuSYuvhdZlf0/EZ4HC0BGuIT6TUau1hHAV+rI8Ym+hRXsdRCN7+bo5l XQNnCa2SNsfRXKIRN5oDxavFnE6wME6EI83ecswle5FxkKa+9n0OLuEi4ffZZ6nSiDbL6L2V 02uyWkldBpUUUrfJHF8OZ9W0XHFts6HbIe5zgM374QSezzvOv61QKlSrG8GnXS1oNFOxsksx W6l0VMqUGHdh0GLZW1Bl21pxdptfDQNn0NiZDc/TWsJWUPk4NyubnA9AUz5CBJjQJ2DC22w+ jOZIDQ2sSEYLqZ+Kl7NpTRZew6RmyFh0TGIGSkdxvJzmPdjcbV8r5ZEpewOq2m95FmBt+DQA Vk1vfPz/Jwteo8hA4t1kh5pgqYDsooJw3IS2H4SC8C7JQFQ5EWX0KPcMOyHrD9H1xqdOz54f RMr8aQioKsSikDHYEhA+VlsiErZUP8f8WZI1fdD6MZUL8fBAfE0+uCQQitwdVs73GOr8DnQz hVkheN7WvcezkAhRtPMQBMyGwZN+Gri+fJ5H0+viFBtnlzvEHYhgPCjOIp3y+fjZ2U/HPKvy O2d/1gFcNr+VW5GLfgB7MuKbDWFOky9lq+kx5qcOfoUd7vE/BpJ5GlyjgYgbuMF1a3NUW55u mnXqr3hwAKcPpz5l06aO7bcY3nowv2oHgzRvovPo2oub4XCaJ7HWSfbR18pjH086uTDfmFMY R72anKE0l7ZSLrzD2jfWc/yZfYOmfKkJDiCgYr2Rw2KIZ7reVLF1gsZ6sd68niMZ3t8QutVK AI5mGivdSiBZwW0PaZXS/uDf+q2Jw0NNPqnW4l7/T52OmQMxZocowZ1200CzTB6SRQ+zpZB+ tsE2lpB0STqmq/BrTwulxE7uUijk21zbKpa2Vm6QKJkEu+KMSU4r0JVEced5Oi8SPkHXyEFg X9uAc342jAA2yRF5Giwp2J3RkPAdO8eJHs1RNQhf8IHGUzl1GnRH4w/JJGPpdrCrqGiMMZyb Ilk4OIzevinBHX/jV7gsdkJpa0XK2iLMN779aymkxJ0FpvNrfF5wQ1bwwqQFUyQhEl9u8VzV SajFAqRZRMVPIQSAqVqPxSqLuHR9AhEgxIMUsoWabEA/Rz6mLWdLe5QA0oH4dwUpk/yNSXo7 mTTtJrR+rQJZ30qS3MHJ4vx1ku7TChlNvKMRDCECSj4/OSVAi8GrU49rUUNg5IlO4DaKA7SG b0ZzwSQrVxQNIE6/FFRjhMMYbhiSnmfEQKz/p7AdJS/70kkeP+uJ5OwwH/ruNG7phPM6uM9Z nBg9AxZZHT5qonzsFVUXgZ/4iF4IPirYo6eS1EFLMevfnp5fW4cb0vNpdHqyEp+IiLYji1dz D4n9mx8BmuxRfPLU16yEXQw20mX5Xgskcpd1H7MaoHui+S3E4tQtxAzX7X8sKEy2X8q+4FHn KIxqeHz8Wba2wYBSgQfzWQPSKL4m3U0TSqjC8DmOODDLvzbatsiYXRH0udu6bHT551WfHeYc 4YteGvoKLtjLtK2vU49r2v9LbCjOMEeCrQAq1Y2T3EbsIiWvkf1MCjupeGZlnDHdUjtnU6na zJWq1ZgLCl0jZ16+7QIE1a+JbgrxRjeWqmaYL5Thtlq1vVovWG3vJmpWf5uoWb3pkahs9cNv qHA1/Njfk4LnGmz89OwUaPH05Mlp+w+sigr/7rqtB/FE8+5+vvOvdu1avrG4cgro3hUXVoqj NrFesOsZZrCLpiofKfOuvAZuPKCWGR5vkXsA5oC1bPRtLUEm0Bd+sf8N14re73zL9YAXqbM5 zEWYSu12imjEv5CtPRFiNNUFNRYMfOmQIfDd890sfkihvPubyreHWP+H2SI4wnOV1innLmu1 ut0FjiRAk9Tq8Rym9D/EopzNU80AAA== --------------9E14815AB428721A5BC99D99-- From owner-kaio@oss.sgi.com Fri Dec 17 17:27:10 1999 Received: by oss.sgi.com id ; Fri, 17 Dec 1999 17:27:00 -0800 Received: from adsl-63-198-73-118.dsl.lsan03.pacbell.net ([63.198.73.118]:7940 "EHLO turing.xman.org") by oss.sgi.com with ESMTP id ; Fri, 17 Dec 1999 17:26:39 -0800 Received: from xman.org (IDENT:cbsmith@dhcpc.intra.xman.org [192.168.1.4]) by turing.xman.org (8.9.3/8.9.3) with ESMTP id RAA00923; Fri, 17 Dec 1999 17:25:31 -0800 Message-ID: <385AE030.1647D073@xman.org> Date: Fri, 17 Dec 1999 17:15:28 -0800 From: Christopher Smith X-Mailer: Mozilla 4.7 [en] (X11; U; Linux 2.2.14pre14 i686) X-Accept-Language: en MIME-Version: 1.0 To: Ananth Ananthanarayanan , kaio@oss.sgi.com Subject: Re: [Fwd: KAIO & sockets: a correction] References: <385ABE2F.56FD2286@sgi.com> Content-Type: multipart/mixed; boundary="------------C3B2E99417360E6CC9D74CE5" Sender: owner-kaio@oss.sgi.com Precedence: bulk Return-Path: X-Orcpt: rfc822;kaio-outgoing This is a multi-part message in MIME format. --------------C3B2E99417360E6CC9D74CE5 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Ananth Ananthanarayanan wrote: > > I sent that mail again to kaio@oss.sgi.com, but > still haven't received even my copy, so I'm > trying to send it to you directly. Please > let me know if you get this message. > > thanks, > > ananth. > > ------------------------------------------------------------------------ > > Chris Smith's program to test KAIO & sockets brought > out a problem in the interaction between KAIO code > and socket code. In a way the problem is similar > to the one already fixed in the PIPE code. This > time, though, I think it should be OK to change > the KAIO code that calls into the socket layer > (also the same KAIO code that calls into PIPE). > > The chages are only a couple of lines of code, so > I'm going to append it to the end of this message. > > Finally, noticed that the socket test was calling > aio_return() without first checking aio_error(), > whereas, aio_error() should be called first, > and only when it returns 0 can aio_return be called. > Note that till the I/O complete aio_error() can > return EINPROGRESS, although in Chris' test aio_suspend > precludes this possiblity. Added the code for aio_error(). Thanks for pointing it out. > Chris, can you let me know if you are able to apply > the following fix & if it works for you? I applied the 2 line change you sent (didn't try the patch but I assume it's the same). It appears to work wonderfully. --Chris P.S.: I attached an updated version of the aio2.cpp code. --------------C3B2E99417360E6CC9D74CE5 Content-Type: image/x-xbitmap; name="aio2.cpp" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="aio2.cpp" #define BUFFER_SIZE 100 #define KAIO_READ 1 extern "C" { #include } #include #include #include #include #include #include #include #include #include #include #include void socketTest(const int portNumber) { cout << "Initiating socket test" << endl; int mySocket = socket(PF_INET, SOCK_STREAM, 0); if (mySocket < 0) { cout << "Error creating socket" << strerror(errno) << endl; exit(1); } socklen_t addrLength = sizeof(struct sockaddr); struct sockaddr_in* socketAddress = (struct sockaddr_in*) malloc (addrLength); socketAddress->sin_family = AF_INET; socketAddress->sin_port = htons(portNumber); inet_aton("127.0.0.1", &(socketAddress->sin_addr)); int returnVal = bind(mySocket, (const struct sockaddr *) socketAddress, addrLength); if (returnVal < 0) { cout << "Error invoking bind" << strerror(errno) << endl; exit(1); } returnVal = listen(mySocket, 10); if (returnVal < 0) { cout << "Error invoking listen" << strerror(errno) << endl; exit(1); } int connectedSocket = accept(mySocket, (struct sockaddr *) socketAddress, &addrLength); if (connectedSocket < 0) { cout << "Error invoking accept" << strerror(errno) << endl; exit(1); } char* buffer = (char *) calloc(BUFFER_SIZE + 1, sizeof(char)); #if defined(KAIO_READ) int reader = recvfrom(connectedSocket, buffer, BUFFER_SIZE, 0, NULL, 0); if (reader == -1) { switch(errno) { case EAGAIN: cout << "Non-blocking" << endl; break; case ENOTCONN: cout << "Not connected" << endl; break; case ENOTSOCK: cout << "Not a socket" << endl; break; case EINVAL: cout << "Cannot read" << endl; break; case EBADF: cout << "Bad file descriptor" << endl; break; case EFAULT: cout << "Buffer is outside of address space" << endl; break; case EINTR: cout << "Interrupted" << endl; break; default: cout << "Error reading socket:" << strerror(errno) << endl; } } #else struct aiocb* control = (struct aiocb*) malloc(sizeof(struct aiocb)); int answer = 0; const struct aiocb** list = (const struct aiocb**) malloc(sizeof(struct aiocb*)); struct timespec wait; control->aio_fildes = connectedSocket; control->aio_lio_opcode = LIO_READ; control->aio_buf = buffer; control->aio_nbytes = (size_t) 1000; control->aio_offset = 0; cout << "Doing read" << endl; answer = aio_read(control); if (answer < 0) { cout << "Error on read: " << strerror(errno) << endl; exit(0); } list[0] = control; wait.tv_sec = 100000;; wait.tv_nsec = 0; cout << "Suspending until complete\n"; answer = aio_suspend(list, 1, &wait); if (answer < 0) { cout << "Error on suspend: " << strerror(errno) << endl; answer = aio_error(control); cout << "Error code: " << answer << endl << "Error string: " << strerror(answer); exit(0); } answer = aio_error(control); if (answer != 0) { cout << "Error on AIO operation: " << strerror(answer) << endl; exit(0); } answer = aio_return(control); cout << "aio_return status is: " << answer << endl; cout << "Read: " << buffer << endl; #endif char *nextLine; int line = 0; char **buff_p = &buffer; const char marker = '\n'; do { nextLine = strsep(buff_p, &marker); cout << line++ << ": " << nextLine << endl; } while (nextLine != NULL); free(buffer); char *answer_buf = (char *) calloc(BUFFER_SIZE, sizeof(char)); sprintf(answer_buf, "HTTP/1.1 200 OK\nDate: %s\nServer: Qhttpd\nConnection:close\nContent-Type: text/html\n\n\n\n This is a test\n\n\n

This is a test

\n\n\n", ctime(NULL)); returnVal = sendto(connectedSocket, answer_buf, strlen(answer_buf), 0, NULL, 0); cout << "Returned with: " << returnVal << endl; cout << "Length: " << strlen(answer_buf) << endl; close(connectedSocket); close(mySocket); } int main(int argc, char** argv) { const int portnumber = (argc > 1) ? atoi(argv[1]) : 1234; if (portnumber > 0) { socketTest(portnumber); } else { printf ("Invalid port number: %d", portnumber); } } --------------C3B2E99417360E6CC9D74CE5-- From owner-kaio@oss.sgi.com Mon Dec 20 11:40:08 1999 Received: by oss.sgi.com id ; Mon, 20 Dec 1999 11:39:59 -0800 Received: from pneumatic-tube.sgi.com ([204.94.214.22]:38236 "EHLO pneumatic-tube.sgi.com") by oss.sgi.com with ESMTP id ; Mon, 20 Dec 1999 11:39:33 -0800 Received: from awesome.engr.sgi.com (awesome.engr.sgi.com [150.166.49.119]) by pneumatic-tube.sgi.com (980327.SGI.8.8.8-aspam/980310.SGI-aspam) via ESMTP id LAA08053 for ; Mon, 20 Dec 1999 11:40:51 -0800 (PST) mail_from (yakker@cthulhu.engr.sgi.com) Received: from localhost (yakker@localhost) by awesome.engr.sgi.com (980427.SGI.8.8.8/970903.SGI.AUTOCF) via SMTP id LAA50853 for ; Mon, 20 Dec 1999 11:37:44 -0800 (PST) Date: Mon, 20 Dec 1999 11:37:44 -0800 (PST) From: Matt Robinson To: kaio@oss.sgi.com Subject: Testing Archive - Please Ignore Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-kaio@oss.sgi.com Precedence: bulk Return-Path: X-Orcpt: rfc822;kaio-outgoing From owner-kaio@oss.sgi.com Wed Dec 22 12:15:37 1999 Received: by oss.sgi.com id ; Wed, 22 Dec 1999 12:15:27 -0800 Received: from sgi.SGI.COM ([192.48.153.1]:51577 "EHLO sgi.com") by oss.sgi.com with ESMTP id ; Wed, 22 Dec 1999 12:15:07 -0800 Received: from madurai.engr.sgi.com ([192.48.174.5]) by sgi.com (980327.SGI.8.8.8-aspam/980304.SGI-aspam: SGI does not authorize the use of its proprietary systems or networks for unsolicited or bulk email from the Internet.) via ESMTP id MAA00829 for ; Wed, 22 Dec 1999 12:14:43 -0800 (PST) mail_from (ananth@sgi.com) Received: from sgi.com (sgigate.sgi.com [198.29.75.75]) by madurai.engr.sgi.com (980205.SGI.8.8.8/970903.SGI.AUTOCF) via ESMTP id MAA154788 for ; Wed, 22 Dec 1999 12:12:32 -0800 (PST) Message-ID: <3861309F.9B966474@sgi.com> Date: Wed, 22 Dec 1999 12:12:15 -0800 From: Ananth Ananthanarayanan X-Mailer: Mozilla 4.6 [en] (X11; I; Linux 2.2.10-1SGI_11smp i686) X-Accept-Language: en MIME-Version: 1.0 To: kaio@oss.sgi.com Subject: KAIO version 1.1 available Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-kaio@oss.sgi.com Precedence: bulk Return-Path: X-Orcpt: rfc822;kaio-outgoing I've uploaded the next revision of patches, kaio-1.1 into http://oss.sgi.com/projects/kaio. Please check news & download sections for changes. A problem with the mail archive has also been corrected (see the link in mailing list section). Thanks to Chris Smith & Robert de Vries for pointing out bugs in version 1.0. Give 1.1 a try and let me know how things turn out. Next up, generating patches for linux 2.3 kernels ... ananth. From owner-kaio@oss.sgi.com Wed Dec 22 20:31:39 1999 Received: by oss.sgi.com id ; Wed, 22 Dec 1999 20:31:29 -0800 Received: from adsl-63-198-73-118.dsl.lsan03.pacbell.net ([63.198.73.118]:40978 "EHLO turing.xman.org") by oss.sgi.com with ESMTP id ; Wed, 22 Dec 1999 20:31:01 -0800 Received: from xman.org (IDENT:cbsmith@dhcpc.intra.xman.org [192.168.1.4]) by turing.xman.org (8.9.3/8.9.3) with ESMTP id UAA06968; Wed, 22 Dec 1999 20:30:35 -0800 Message-ID: <3861A308.36506A0C@xman.org> Date: Wed, 22 Dec 1999 20:20:24 -0800 From: Christopher Smith X-Mailer: Mozilla 4.7 [en] (X11; U; Linux 2.2.14pre16 i686) X-Accept-Language: en MIME-Version: 1.0 To: Ananth Ananthanarayanan CC: kaio@oss.sgi.com Subject: Re: KAIO version 1.1 available References: <3861309F.9B966474@sgi.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-kaio@oss.sgi.com Precedence: bulk Return-Path: X-Orcpt: rfc822;kaio-outgoing Ananth Ananthanarayanan wrote: > > I've uploaded the next revision of patches, > kaio-1.1 into http://oss.sgi.com/projects/kaio. > Please check news & download sections for changes. > A problem with the mail archive has also been > corrected (see the link in mailing list section). > > Thanks to Chris Smith & Robert de Vries > for pointing out bugs in version 1.0. Thanks for the thanks!!! I feel like a real contributor now! ;-) > Give 1.1 a try and let me know how things turn out. It works fine for me! Glad to see we've got full socket support now! ;-) --Chris