static void socket_bind_local (JNIEnv *env, jobject object, jobject fileDescriptor, jstring name, jint namespaceId) { int ret; int fd; if (name == NULL) { jniThrowNullPointerException(env, NULL); return; } fd = jniGetFDFromFileDescriptor(env, fileDescriptor); if (env->ExceptionCheck()) { return; } ScopedUtfChars nameUtf8(env, name); ret = socket_local_server_bind(fd, nameUtf8.c_str(), namespaceId); if (ret < 0) { jniThrowIOException(env, errno); return; } }
static void socket_bind_local (JNIEnv *env, jobject object, jobject fileDescriptor, jstring name, jint namespaceId) { int ret; int fd; const char *nameUtf8; if (name == NULL) { jniThrowNullPointerException(env, NULL); } fd = jniGetFDFromFileDescriptor(env, fileDescriptor); if (env->ExceptionOccurred() != NULL) { return; } nameUtf8 = env->GetStringUTFChars(name, NULL); ret = socket_local_server_bind(fd, nameUtf8, namespaceId); env->ReleaseStringUTFChars(name, nameUtf8); if (ret < 0) { jniThrowIOException(env, errno); return; } }
static inline int create_server_socket(const char* name) { int s = socket(AF_LOCAL, SOCK_STREAM, 0); APPL_TRACE_DEBUG1("covert name to android abstract name:%s", name); if(socket_local_server_bind(s, name, ANDROID_SOCKET_NAMESPACE_ABSTRACT) >= 0) { if(listen(s, 5) == 0) { APPL_TRACE_DEBUG2("listen to local socket:%s, fd:%d", name, s); return s; } else APPL_TRACE_ERROR3("listen to local socket:%s, fd:%d failed, errno:%d", name, s, errno); } else APPL_TRACE_ERROR3("create local socket:%s fd:%d, failed, errno:%d", name, s, errno); close(s); return -1; }
/******************************************************************************* ** ** Function skt_create ** ** Description Create local socket, listen and return the Socket file ** descriptor ** ** Returns socket file descriptor ** *******************************************************************************/ int skt_create(const char* name) { int s = socket(AF_LOCAL, SOCK_STREAM, 0); BTSKTDBG(" %s ", __FUNCTION__); if(socket_local_server_bind(s, name, ANDROID_SOCKET_NAMESPACE_ABSTRACT) < 0) { BTSKTERR("socket failed to create (%s)", strerror(errno)); close(s); return -1; } if(listen(s, 5) < 0) { BTSKTERR("listen failed (%s)", strerror(errno)); close(s); return -1; } return s; }
/* ========================================================================= FUNCTION : btc_accept DESCRIPTION : DEPENDENCIES : None RETURN VALUE : None ============================================================================*/ static int btc_accept(char *name) { int fd = -1; struct sockaddr_in client_address; socklen_t clen; ALOGV("%s: ACCEPT ", __func__); sock_id = socket(AF_LOCAL, SOCK_STREAM, 0); if (sock_id < 0) { ALOGE("Socket creation failure"); return fd; } ALOGV("covert name to android abstract name:%s %d", name, sock_id); if (socket_local_server_bind(sock_id, name, ANDROID_SOCKET_NAMESPACE_ABSTRACT) >= 0) { if (listen(sock_id, 5) == 0) { ALOGV("BTC listen to local socket:%s, fd:%d", name, sock_id); } else { ALOGE("BTC listen to local socket:failed"); return fd; } } else { close(sock_id); sock_id=-1; ALOGE("BTC sock ser bind failed"); return fd; } clen = sizeof(client_address); ALOGV("before accept_server_socket"); fd = accept(sock_id, (struct sockaddr *)&client_address, &clen); if (fd > 0) { ALOGV("BTC accepted fd:%d for server fd:%d", fd, sock_id); return fd; } else { ALOGE("BTC accept failed fd:%d sock d:%d error %s", fd, sock_id, strerror(errno)); return fd; } return fd; }
int create_server_socket(const char* name) { int sock = socket(AF_LOCAL, SOCK_STREAM, 0); if(sock < 0) return -1; LOGV("create_server_socket %s", name); if(socket_local_server_bind(sock, name, ANDROID_SOCKET_NAMESPACE_ABSTRACT) < 0) { LOGE("socket failed to create (%s)", strerror(errno)); return -1; } if(listen(sock, 1) < 0) { LOGE("listen failed (%s)", strerror(errno)); close(sock); return -1; } LOGV("created socket fd %d", sock); return sock; }