utils: fix systemd socket removing 27/148727/1
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Thu, 7 Sep 2017 14:16:11 +0000 (17:16 +0300)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Thu, 7 Sep 2017 14:44:35 +0000 (17:44 +0300)
If we use unix socket, we create and remove socket.
If we use systemd unix socket, systemd creates and removes socket.

Change-Id: I701ff706ca3595fd00000a120f5e06fd595bc463
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
src/utils/unix/unix_server.cpp

index 9846d55..6bfdf4d 100644 (file)
@@ -51,9 +51,6 @@ static int create_unix_socket(const std::string &name, int backlog)
     addr.sun_family = AF_UNIX;
     ::memcpy(addr.sun_path, name.c_str(), name_len + 1);
 
-    // remove path
-    ::unlink(addr.sun_path);
-
     if (-1 == ::bind(fd, (struct sockaddr *)&addr, sizeof(addr))) {
         ::close(fd);
         throw std::runtime_error("Cannot bind socket, errno=" + std::to_string(errno));
@@ -101,12 +98,14 @@ Server::~Server()
 
 int Server::init(const std::string &name, int backlog, bool is_systemd)
 {
-    if (is_systemd)
+    if (is_systemd) {
         fd_ = create_unix_socket_sd(name, backlog);
-    else
+    } else {
+        // remove path
+        ::unlink(name.c_str());
         fd_ = create_unix_socket(name, backlog);
-
-    name_ = name;
+        name_ = name;
+    }
 
     return 0;
 }