From 46d13f4cc568a076eaeac0c78d4fd6fee2baa7d2 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Tue, 11 Mar 2014 15:52:05 -0700 Subject: [PATCH] Close server socket after accepting remote client. --- Console.cpp | 62 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/Console.cpp b/Console.cpp index 945b9bc..0840ca5 100644 --- a/Console.cpp +++ b/Console.cpp @@ -808,37 +808,49 @@ int Main(int argc, char const * const argv[], char const * const envp[]) { if (pid == _not(pid_t)) client_ = -1; else { - int server(_syscall(socket(PF_UNIX, SOCK_STREAM, 0))); try { - struct sockaddr_un address; - memset(&address, 0, sizeof(address)); - address.sun_family = AF_UNIX; + struct Socket { + int fd_; - sprintf(address.sun_path, "/tmp/.s.cy.%u", getpid()); - unlink(address.sun_path); + Socket(int fd) : + fd_(fd) + { + } - struct File { - const char *path_; + ~Socket() { + close(fd_); + } - File(const char *path) : - path_(path) - { - } + operator int() { + return fd_; + } + } server(_syscall(socket(PF_UNIX, SOCK_STREAM, 0))); - ~File() { - unlink(path_); - } - } file(address.sun_path); + struct sockaddr_un address; + memset(&address, 0, sizeof(address)); + address.sun_family = AF_UNIX; - _syscall(bind(server, reinterpret_cast(&address), SUN_LEN(&address))); - _syscall(chmod(address.sun_path, 0777)); + sprintf(address.sun_path, "/tmp/.s.cy.%u", getpid()); + unlink(address.sun_path); - _syscall(listen(server, 1)); - InjectLibrary(pid); - client_ = _syscall(accept(server, NULL, NULL)); - } catch (...) { - _syscall(close(server)); - throw; - } + struct File { + const char *path_; + + File(const char *path) : + path_(path) + { + } + + ~File() { + unlink(path_); + } + } file(address.sun_path); + + _syscall(bind(server, reinterpret_cast(&address), SUN_LEN(&address))); + _syscall(chmod(address.sun_path, 0777)); + + _syscall(listen(server, 1)); + InjectLibrary(pid); + client_ = _syscall(accept(server, NULL, NULL)); } #else client_ = -1; -- 2.45.2