Android Local Sockets In Native Code
T.V.R.Prasad
Contents
● Types of Sockets
● ANDROID_SOCKET_NAMESPACE_ABSTRACT
● ANDROID_SOCKET_NAMESPACE_RESERVED
● ANDROID_SOCKET_NAMESPACE_FILESYSTEM
Types Of Sockets
● ANDROID_SOCKET_NAMESPACE_ABSTRACT
A socket in the Linux abstract namespace.
● ANDROID_SOCKET_NAMESPACE_RESERVED
A socket in the Android reserved namespace in 
/dev/socket.  
● ANDROID_SOCKET_NAMESPACE_FILESYSTEM
A socket named with a normal filesystem path. 
● The code indicates the presence of filesystem 
entries for  the RESERVED and FILESYSTEM type of 
sockets. 
ANDROID_SOCKET_NAMESPACE_ABSTRACT
       /* Server Example */
int serverFd; /* File descriptor of Server Socket */
int clientFd;  /* File descriptor of Client Socket */
int clen; /* Size of the peer address */
serverFd = socket_local_server("android:debuggerd",
    ANDROID_SOCKET_NAMESPACE_ABSTRACT, SOCK_STREAM);   
 if(serverFd < 0) return ­1;
 struct sockaddr addr;
 socklen_t alen = sizeof(addr);
/* Wait for connection request from client */
    clientFd = accept(s, &addr, &alen);
/* Read and write data from client socket */
readLen = read(clientFd, data, dataLen);
writeLen = write(clientFd, status, sizeof(status));
ANDROID_SOCKET_NAMESPACE_ABSTRACT
                  /* Client Example */
int socketFd; /* File descriptor of Server Socket */
socketFd = socket_local_client("android:debuggerd",
    ANDROID_SOCKET_NAMESPACE_ABSTRACT, SOCK_STREAM);   
if(socketFd >= 0) {
/* Read and write data to the server */
readLen = read(socketFd, data, dataLen);
writeLen = write(socketFd, status, sizeof(status));
}
/*  Close the server socket once done */
close(socketFd);
ANDROID_SOCKET_NAMESPACE_RESERVED
     /* Server Example */
int serverFd; /* File descriptor of Server Socket */
int clientFd;  /* File descriptor of Client Socket */
int clen; /* Size of the peer address */
serverFd = socket_local_server("gps", 
ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_SEQPACKET);
/* Wait for connection request from client */
clientFd = accept(serverFd, 0, &clen); 
/* Read data from client socket */
readLen = read(clientFd, data, dataLen);
/* Write data to client socket */
writeLen = write(clientFd, status, sizeof(status));
ANDROID_SOCKET_NAMESPACE_RESERVED
/* Client Example */
int socketFd; /* File descriptor of Socket */
/*Create a client socket and connect to the address 
with the name gps in the reserved socket namespace */
socketFd = socket_local_client("gps", 
ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_SEQPACKET);
/*
socketFd less than 0 indicates failure to connect to 
the server,return Error;
*/
if(socketFd < 0) {
return Error;
} 
/* Read and write data to the server */
readLen = read(socketFd, data, dataLen);
writeLen = write(socketFd, status, sizeof(status));
ANDROID_SOCKET_NAMESPACE_FILESYSTEM
       /* Server Example */
/* File descriptor of Server Socket and Client sockets*/
int serverFd,clientFd; 
int connect(const char *name)
{
serverFd = socket_local_server(name, 
ANDROID_SOCKET_NAMESPACE_FILESYSTEM, SOCK_STREAM);
return serverFd;
}
/* Wait for connection request from client and after 
accepting the connection read and write data from 
client socket */
readLen = read(clientFd, data, dataLen);
ANDROID_SOCKET_NAMESPACE_FILESYSTEM
                  /* Client Example */
int socketFd; /* File descriptor of Server Socket */
int connect(const char *name)
{
socketFd = socket_local_client(name, 
ANDROID_SOCKET_NAMESPACE_FILESYSTEM, SOCK_STREAM);
return socketFd;
}
if(socketFd >= 0) {
/* Read and write data to the server */
readLen = read(socketFd, data, dataLen);
/*  Close the server socket once done */
close(socketFd);
Thank You

Android local sockets in native code