static void *server_socket_thread(void * arg) { int serverfd, fd; struct sockaddr addr; socklen_t alen; int port = (int) (uintptr_t) arg; D("transport: server_socket_thread() starting\n"); serverfd = -1; for(;;) { if(serverfd == -1) { serverfd = socket_inaddr_any_server(port, SOCK_STREAM); if(serverfd < 0) { D("server: cannot bind socket yet: %s\n", strerror(errno)); adb_sleep_ms(1000); continue; } close_on_exec(serverfd); } alen = sizeof(addr); D("server: trying to get new connection from %d\n", port); fd = adb_socket_accept(serverfd, &addr, &alen); if(fd >= 0) { D("server: new connection on fd %d\n", fd); close_on_exec(fd); disable_tcp_nagle(fd); register_socket_transport(fd, "host", port, 1); } } D("transport: server_socket_thread() exiting\n"); return 0; }
static void server_socket_thread(void* arg) { int serverfd, fd; sockaddr_storage ss; sockaddr *addrp = reinterpret_cast<sockaddr*>(&ss); socklen_t alen; int port = (int) (uintptr_t) arg; adb_thread_setname("server socket"); D("transport: server_socket_thread() starting"); serverfd = -1; for(;;) { if(serverfd == -1) { std::string error; serverfd = network_inaddr_any_server(port, SOCK_STREAM, &error); if(serverfd < 0) { D("server: cannot bind socket yet: %s", error.c_str()); adb_sleep_ms(1000); continue; } close_on_exec(serverfd); } alen = sizeof(ss); D("server: trying to get new connection from %d", port); fd = adb_socket_accept(serverfd, addrp, &alen); if(fd >= 0) { D("server: new connection on fd %d", fd); close_on_exec(fd); disable_tcp_nagle(fd); register_socket_transport(fd, "host", port, 1); } } D("transport: server_socket_thread() exiting"); }
// This test checks if we can close sockets in CLOSE_WAIT state. TEST_F(LocalSocketTest, close_socket_in_CLOSE_WAIT_state) { std::string error; int listen_fd = network_inaddr_any_server(5038, SOCK_STREAM, &error); ASSERT_GE(listen_fd, 0); adb_thread_t client_thread; ASSERT_TRUE(adb_thread_create(reinterpret_cast<void (*)(void*)>(ClientThreadFunc), nullptr, &client_thread)); struct sockaddr addr; socklen_t alen; alen = sizeof(addr); int accept_fd = adb_socket_accept(listen_fd, &addr, &alen); ASSERT_GE(accept_fd, 0); CloseRdHupSocketArg arg; arg.socket_fd = accept_fd; PrepareThread(); adb_thread_t thread; ASSERT_TRUE(adb_thread_create(reinterpret_cast<void (*)(void*)>(CloseRdHupSocketThreadFunc), &arg, &thread)); // Wait until the fdevent_loop() starts. adb_sleep_ms(SLEEP_FOR_FDEVENT_IN_MS); EXPECT_EQ(1u + GetAdditionalLocalSocketCount(), fdevent_installed_count()); // Wait until the client closes its socket. ASSERT_TRUE(adb_thread_join(client_thread)); adb_sleep_ms(SLEEP_FOR_FDEVENT_IN_MS); ASSERT_EQ(GetAdditionalLocalSocketCount(), fdevent_installed_count()); TerminateThread(thread); }
static void listener_event_func(int _fd, unsigned ev, void* _l) { alistener* listener = reinterpret_cast<alistener*>(_l); asocket *s; if (ev & FDE_READ) { sockaddr_storage ss; sockaddr* addrp = reinterpret_cast<sockaddr*>(&ss); socklen_t alen; int fd; alen = sizeof(ss); fd = adb_socket_accept(_fd, addrp, &alen); if (fd < 0) { return; } s = create_local_socket(fd); if (s) { s->transport = listener->transport; connect_to_remote(s, listener->connect_to.c_str()); return; } adb_close(fd); } }
static void ss_listener_event_func(int _fd, unsigned ev, void *_l) { asocket *s; if(ev & FDE_READ) { struct sockaddr addr; socklen_t alen; int fd; alen = sizeof(addr); fd = adb_socket_accept(_fd, &addr, &alen); if(fd < 0) return; adb_socket_setbufsize(fd, CHUNK_SIZE); s = create_local_socket(fd); if(s) { D("in ss_listener_event_func connecting to smartsocket\n"); connect_to_smartsocket(s); return; } adb_close(fd); } }
static void jdwp_control_event( int s, unsigned events, void* _control ) { JdwpControl* control = (JdwpControl*) _control; if (events & FDE_READ) { struct sockaddr addr; socklen_t addrlen = sizeof(addr); int s = -1; JdwpProcess* proc; do { s = adb_socket_accept( control->listen_socket, &addr, &addrlen ); if (s < 0) { if (errno == EINTR) continue; if (errno == ECONNABORTED) { /* oops, the JDWP process died really quick */ D("oops, the JDWP process died really quick\n"); return; } /* the socket is probably closed ? */ D( "weird accept() failed on jdwp control socket: %s\n", strerror(errno) ); return; } } while (s < 0); proc = jdwp_process_alloc( s ); if (proc == NULL) return; } }
static void server_socket_thread(void* arg) { int serverfd, fd; int port = (int) (uintptr_t) arg; adb_thread_setname("server socket"); D("transport: server_socket_thread() starting"); serverfd = -1; for(;;) { if(serverfd == -1) { std::string error; serverfd = network_inaddr_any_server(port, SOCK_STREAM, &error); if(serverfd < 0) { D("server: cannot bind socket yet: %s", error.c_str()); std::this_thread::sleep_for(1s); continue; } close_on_exec(serverfd); } D("server: trying to get new connection from %d", port); fd = adb_socket_accept(serverfd, nullptr, nullptr); if(fd >= 0) { D("server: new connection on fd %d", fd); close_on_exec(fd); disable_tcp_nagle(fd); std::string serial = android::base::StringPrintf("host-%d", fd); if (register_socket_transport(fd, serial.c_str(), port, 1) != 0) { adb_close(fd); } } } D("transport: server_socket_thread() exiting"); }
static void jdwp_control_event(int fd, unsigned events, void* _control) { JdwpControl* control = (JdwpControl*)_control; CHECK_EQ(fd, control->listen_socket); if (events & FDE_READ) { int s = adb_socket_accept(control->listen_socket, nullptr, nullptr); if (s < 0) { if (errno == ECONNABORTED) { /* oops, the JDWP process died really quick */ D("oops, the JDWP process died really quick"); return; } else { /* the socket is probably closed ? */ D("weird accept() failed on jdwp control socket: %s", strerror(errno)); return; } } auto proc = std::make_unique<JdwpProcess>(s); if (!proc) { LOG(FATAL) << "failed to allocate JdwpProcess"; } _jdwp_list.emplace_back(std::move(proc)); } }
void listener_event_func(int _fd, unsigned ev, void* _l) { alistener* listener = reinterpret_cast<alistener*>(_l); asocket *s; if (ev & FDE_READ) { struct sockaddr addr; socklen_t alen; int fd; alen = sizeof(addr); fd = adb_socket_accept(_fd, &addr, &alen); if (fd < 0) { return; } s = create_local_socket(fd); if (s) { s->transport = listener->transport; connect_to_remote(s, listener->connect_to); return; } adb_close(fd); } }
static void listener_event_func(int _fd, unsigned ev, void *_l) { alistener *l = _l; asocket *s; if(ev & FDE_READ) { struct sockaddr addr; socklen_t alen; int fd; alen = sizeof(addr); fd = adb_socket_accept(_fd, &addr, &alen); if(fd < 0) return; s = create_local_socket(fd); if(s) { s->transport = l->transport; connect_to_remote(s, l->connect_to); return; } D("listener_event_func adb_close \n"); XLOGD("listener_event_func adb_close \n"); adb_close(fd); } }
static void ss_listener_event_func(int _fd, unsigned ev, void *_l) { if (ev & FDE_READ) { int fd = adb_socket_accept(_fd, nullptr, nullptr); if (fd < 0) return; int rcv_buf_size = CHUNK_SIZE; adb_setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &rcv_buf_size, sizeof(rcv_buf_size)); asocket* s = create_local_socket(fd); if (s) { connect_to_smartsocket(s); return; } adb_close(fd); } }
static void ss_listener_event_func(int _fd, unsigned ev, void *_l) { if (ev & FDE_READ) { sockaddr_storage ss; sockaddr* addrp = reinterpret_cast<sockaddr*>(&ss); socklen_t alen = sizeof(ss); int fd = adb_socket_accept(_fd, addrp, &alen); if (fd < 0) return; int rcv_buf_size = CHUNK_SIZE; adb_setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &rcv_buf_size, sizeof(rcv_buf_size)); asocket* s = create_local_socket(fd); if (s) { connect_to_smartsocket(s); return; } adb_close(fd); } }
static void adbd_auth_listener(int fd, unsigned events, void* data) { int s = adb_socket_accept(fd, nullptr, nullptr); if (s < 0) { PLOG(ERROR) << "Failed to accept"; return; } if (framework_fd >= 0) { LOG(WARNING) << "adb received framework auth socket connection again"; framework_disconnected(); } framework_fd = s; framework_fde = fdevent_create(framework_fd, adbd_auth_event, nullptr); fdevent_add(framework_fde, FDE_READ); if (needs_retry) { needs_retry = false; send_auth_request(usb_transport); } }
static void listener_event_func(int _fd, unsigned ev, void* _l) { alistener* listener = reinterpret_cast<alistener*>(_l); asocket *s; if (ev & FDE_READ) { int fd = adb_socket_accept(_fd, nullptr, nullptr); if (fd < 0) { return; } s = create_local_socket(fd); if (s) { s->transport = listener->transport; connect_to_remote(s, listener->connect_to.c_str()); return; } adb_close(fd); } }