1717#include < stdlib.h>
1818#include < unistd.h>
1919
20+ #include < unistd.h>
2021#include < sys/socket.h>
22+ #include < sys/un.h>
2123#include < netinet/in.h>
22- #include < arpa/inet.h>
2324
2425#include < cutils/log.h>
2526
2829namespace android {
2930namespace gltrace {
3031
31- int acceptClientConnection (int serverPort ) {
32- int serverSocket = socket (PF_INET , SOCK_STREAM, IPPROTO_TCP );
32+ int acceptClientConnection (char *sockname ) {
33+ int serverSocket = socket (AF_LOCAL , SOCK_STREAM, 0 );
3334 if (serverSocket < 0 ) {
3435 ALOGE (" Error (%d) while creating socket. Check if app has network permissions." ,
3536 serverSocket);
3637 return -1 ;
3738 }
3839
39- struct sockaddr_in server, client;
40+ struct sockaddr_un server, client;
4041
41- server.sin_family = AF_INET;
42- server.sin_addr .s_addr = htonl (INADDR_ANY);
43- server.sin_port = htons (serverPort);
42+ memset (&server, 0 , sizeof server);
43+ server.sun_family = AF_UNIX;
44+ // the first byte of sun_path should be '\0' for abstract namespace
45+ strcpy (server.sun_path + 1 , sockname);
4446
45- socklen_t sockaddr_len = sizeof (sockaddr_in);
46- if (bind (serverSocket, (struct sockaddr *) &server, sizeof (server)) < 0 ) {
47+ // note that sockaddr_len should be set to the exact size of the buffer that is used.
48+ socklen_t sockaddr_len = sizeof (server.sun_family ) + strlen (sockname) + 1 ;
49+ if (bind (serverSocket, (struct sockaddr *) &server, sockaddr_len) < 0 ) {
4750 close (serverSocket);
4851 ALOGE (" Failed to bind the server socket" );
4952 return -1 ;
@@ -55,7 +58,7 @@ int acceptClientConnection(int serverPort) {
5558 return -1 ;
5659 }
5760
58- ALOGD (" gltrace::waitForClientConnection: server listening @ port %d " , serverPort );
61+ ALOGD (" gltrace::waitForClientConnection: server listening @ path %s " , sockname );
5962
6063 int clientSocket = accept (serverSocket, (struct sockaddr *)&client, &sockaddr_len);
6164 if (clientSocket < 0 ) {
@@ -64,7 +67,7 @@ int acceptClientConnection(int serverPort) {
6467 return -1 ;
6568 }
6669
67- ALOGD (" gltrace::waitForClientConnection: client connected: %s " , inet_ntoa (client. sin_addr ) );
70+ ALOGD (" gltrace::waitForClientConnection: client connected. " );
6871
6972 // do not accept any more incoming connections
7073 close (serverSocket);
0 commit comments