[ace-users] Help ! Porting ACE Proactor Aio application on Linux

Steve Huston shuston at riverace.com
Wed Mar 2 16:30:27 CST 2016


Thank you for the PROBLEM-REPORT-FORM.

I looked for a bit and found no new developments in Linux kernel aio socket support, so the situation has apparently not changed.

Your choices are:
1. Redesign your application to alternate reads and writes; some protocols won’t support this well, but if you can it’s the easiest way.
2. Change to using Reactor (particularly, ACE_Dev_Poll_Reactor) on Linux, at least.
3. Write something to emulate aio using reactive mechanisms. There was an effort that did this in ACE quite a few years ago – maybe you can get your hands on that and see if it could work for you.

-Steve

From: ace-users [mailto:ace-users-bounces at list.isis.vanderbilt.edu] On Behalf Of h w
Sent: Tuesday, March 01, 2016 9:45 AM
To: ace-users at list.isis.vanderbilt.edu
Subject: [ace-users] Help ! Porting ACE Proactor Aio application on Linux

ACE VERSION: 6.3.0

    HOST MACHINE and OPERATING SYSTEM:
         Centos 6.7   and Linux kernel 2.6.32-573.12.1.el6.i686


    THE $ACE_ROOT/ace/config.h
           #define ACE_LACKS_GETIPNODEBYADDR
           #define ACE_LACKS_GETIPNODEBYNAME
           #define ACE_HAS_AIO_CALLS
           #include "ace/config-linux.h"


    THE $ACE_ROOT/include/makeinclude/platform_macros.GNU
            include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU


    CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/default.features
            no such file

    AREA/CLASS/EXAMPLE AFFECTED:  no


    DOES THE PROBLEM AFFECT:
        COMPILATION?      no
        LINKING?     no
            On Unix systems, did you run make realclean first?   Yes, I did.


    SYNOPSIS:
        Using ACE Proactor AIO framework on network sockets to exchange messages between two or more endpoints on  linux OS.  It looked the message read or write blocked or in order.

    DESCRIPTION:
         I am porting an application into Linux which utilizes ACE proactor AIO framework for a network communication ( read/ write socket ).  It works fine on Windows OS. However, on Linux, The application looked like exchange messages in order,  for example, When I tried to send a message to the peer, I found that ACE_POSIX_AIOCB_Proactor did invoke aio_write() but the message did not get sent out util the peer sent a message out, and then got that previous message in. More worse, most time, when the connector estalished a connection and tried to send the first message, the system got locked up because a read operation probably be put before write operation for listening any incoming messages.

         I searched the issue and found the similar issue report in the link but it was several years age:  https://stevehuston.wordpress.com/2008/11/25/when-is-it-ok-to-use-ace-proactor-on-linux/

Is it  still the limitation on Linux?  Is there any way to get the ACE Proactor AIO work for network communication ( exchange message via socket with full duplex) now?  Any help would be greatly appreciated


Thanks!

This email has been sent from a virus-free computer protected by Avast.
www.avast.com<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.isis.vanderbilt.edu/pipermail/ace-users/attachments/20160302/6897aabc/attachment.html>


More information about the ace-users mailing list