static void *server_socket_thread(void * arg) { int serverfd, fd; struct sockaddr addr; socklen_t alen; int port = (int)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\n"); sdb_sleep_ms(1000); continue; } close_on_exec(serverfd); } alen = sizeof(addr); D("server: trying to get new connection from %d\n", port); fd = sdb_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, NULL); } } D("transport: server_socket_thread() exiting\n"); return 0; }
int local_name_to_fd(const char *name) { int port; if(!strncmp("tcp:", name, 4)){ int ret; port = atoi(name + 4); if (gListenAll > 0) { ret = socket_inaddr_any_server(port, SOCK_STREAM); } else { ret = socket_loopback_server(port, SOCK_STREAM); } return ret; } #ifndef HAVE_WIN32_IPC /* no Unix-domain sockets on Win32 */ // It's non-sensical to support the "reserved" space on the adb host side if(!strncmp(name, "local:", 6)) { return socket_local_server(name + 6, ANDROID_SOCKET_NAMESPACE_ABSTRACT, SOCK_STREAM); } else if(!strncmp(name, "localabstract:", 14)) { return socket_local_server(name + 14, ANDROID_SOCKET_NAMESPACE_ABSTRACT, SOCK_STREAM); } else if(!strncmp(name, "localfilesystem:", 16)) { return socket_local_server(name + 16, ANDROID_SOCKET_NAMESPACE_FILESYSTEM, SOCK_STREAM); } #endif printf("unknown local portname '%s'\n", name); return -1; }
int TcpStream::listen(unsigned short port, bool localhost_only) { if (localhost_only) { m_sock = socket_loopback_server(port, SOCK_STREAM); } else { m_sock = socket_inaddr_any_server(port, SOCK_STREAM); } if (!valid()) return int(ERR_INVALID_SOCKET); return 0; }
// This functionality is currently only used by tests so we don't need any error messages. std::unique_ptr<UdpSocket> UdpSocket::NewUdpServer(int port) { if (!InitWinsock()) { return nullptr; } SOCKET sock = socket_inaddr_any_server(port, SOCK_DGRAM); if (sock == INVALID_SOCKET) { return nullptr; } return std::unique_ptr<UdpSocket>(new WindowsUdpSocket(sock, WindowsUdpSocket::Type::kServer)); }