[android-developers] Re: Problem in Android-JNI IPC

2008-12-03 Thread Dianne Hackborn
Hi, this is not about developing for the SDK, so should be moved to one of
the open source groups.  Thanks.

On Wed, Dec 3, 2008 at 6:10 AM, Pankaj Munjal [EMAIL PROTECTED]wrote:


 Hello folks,

 I have implemented a JNI layer for communication between the Android
 Java Application and Android Native C code.
 However, we are facing issues with IPC in this JNI layer.

 I tried the following IPC approaches:

 1. Socket in JNI layer: C Sockets to communicate with the underlying C
 based processes.
I get an error in bind().

 Sample code:

   fd_recv_es = socket(AF_INET,SOCK_DGRAM,0);

   if (0  fd_recv_es)

   {

   return (FAILURE);

   }



   bzero(es_recv_addr, sizeof(es_recv_addr));

   es_recv_addr.sin_family = AF_INET;

   es_recv_addr.sin_port = htons(self_port);

   es_recv_addr.sin_addr.s_addr = inet_addr(self_ip.str);

   memset((es_recv_addr.sin_zero), '\0', 8);

   if ( -1 == bind( fd_recv_es,(struct sockaddr*)(es_recv_addr),
 sizeof(struct sockaddr_in)))   // Fails here

   {

   return (FAILURE);

   }



 2. Message Q in JNI layer: Linux based message queue to communicate
 with the underlying C based processes.

   I get an error in creating the
 message queue.

 Sample Code:

  struct my_msgbuf buf;

  int msqid, i;

  key_t key;

  if ((key = ftok(/data/IPC/dummy, 'B')) == -1)

  {

  perror(ftok);

  exit(1);

  }

  if ((msqid = msgget(key, 0644 | IPC_CREAT)) == -1) // Fails
 here

  {

 perror(msgget);

 exit(1);

  }



 Both these approaches work perfectly fine when I use them in an
 Android C executable,
 and we are getting this problem only when we use them in a JNI DLL.

 The linking command for the building JNI DLL is:
 ALIB   := $(NDK_BASE)/toolchain/arm-eabi/lib/gcc/arm-eabi/4.2.1/
 libgcc.a
 $(CC) -nostdlib -Wl,-soname,libApp.so -Wl,-shared,-Bsymbolic
 -L$(NDK_BASE)/lib $^ $(LIBS) -o libApp.so -Wl,--no-undefined
 $(ALIB)

 Has anyone faced a similar issues with IPC(with C executables) in JNI
 layer?
 Also, are there are some other flags required for building a JNI DLL
 that I've missed out on.
 Any pointers in this direction shall be really helpful.

 Thanks,
 Pankaj

 



-- 
Dianne Hackborn
Android framework engineer
[EMAIL PROTECTED]

Note: please don't send private questions to me, as I don't have time to
provide private support.  All such questions should be posted on public
forums, where I and others can see and answer them.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/android-developers?hl=en
-~--~~~~--~~--~--~---



[android-developers] Re: Problem in Android-JNI IPC

2008-12-03 Thread limpwhizzkid

You'll need to add network access permissions to the manifest for the
Android application that is loading the shared object.

For the second issue, I had noticed that message queues work fine on
the emulator, but fail on target. After a closer examination using
strace, I realized that system call SYS_303 is supported on the
emulator but not on the target. Stick to socket or some other IPC
mechanism.

--Ashu

On Dec 3, 6:10 am, Pankaj Munjal [EMAIL PROTECTED] wrote:
 Hello folks,

 I have implemented a JNI layer for communication between the Android
 Java Application and Android Native C code.
 However, we are facing issues withIPCin this JNI layer.

 I tried the followingIPCapproaches:

 1. Socket in JNI layer: C Sockets to communicate with the underlying C
 based processes.
                                 I get an error in bind().

 Sample code:

    fd_recv_es = socket(AF_INET,SOCK_DGRAM,0);

    if (0  fd_recv_es)

    {

        return (FAILURE);

    }

    bzero(es_recv_addr, sizeof(es_recv_addr));

    es_recv_addr.sin_family = AF_INET;

    es_recv_addr.sin_port = htons(self_port);

    es_recv_addr.sin_addr.s_addr = inet_addr(self_ip.str);

    memset((es_recv_addr.sin_zero), '\0', 8);

    if ( -1 == bind( fd_recv_es,(struct sockaddr*)(es_recv_addr),
 sizeof(struct sockaddr_in)))   // Fails here

    {

        return (FAILURE);

    }

 2. Message Q in JNI layer: Linux based message queue to communicate
 with the underlying C based processes.

                                    I get an error in creating the
 message queue.

 Sample Code:

       struct my_msgbuf buf;

       int msqid, i;

       key_t key;

       if ((key = ftok(/data/IPC/dummy, 'B')) == -1)

       {

           perror(ftok);

           exit(1);

       }

       if ((msqid = msgget(key, 0644 | IPC_CREAT)) == -1)     // Fails
 here

       {

          perror(msgget);

          exit(1);

       }

 Both these approaches work perfectly fine when I use them in an
 Android C executable,
 and we are getting thisproblemonly when we use them in a JNI DLL.

 The linking command for the building JNI DLL is:
 ALIB       := $(NDK_BASE)/toolchain/arm-eabi/lib/gcc/arm-eabi/4.2.1/
 libgcc.a
 $(CC) -nostdlib -Wl,-soname,libApp.so -Wl,-shared,-Bsymbolic
 -L$(NDK_BASE)/lib $^ $(LIBS) -o libApp.so -Wl,--no-undefined
 $(ALIB)

 Has anyone faced a similar issues withIPC(with C executables) in JNI
 layer?
 Also, are there are some other flags required for building a JNI DLL
 that I've missed out on.
 Any pointers in this direction shall be really helpful.

 Thanks,
 Pankaj

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~--~~~~--~~--~--~---