+ master_socket_ = socket(AF_UNIX,
+#ifdef __APPLE__
+ SOCK_STREAM, /* Mac OSX does not have AF_UNIX + SOCK_SEQPACKET, even if that's faster */
+#else
+ SOCK_SEQPACKET,
+#endif
+ 0);
+ xbt_assert(master_socket_ != -1, "Cannot create the master socket: %s", strerror(errno));
+
+ master_socket_name = "/tmp/simgrid-mc-" + std::to_string(getpid());
+ master_socket_name.resize(MC_SOCKET_NAME_LEN); // truncate socket name if it's too long
+ master_socket_name.back() = '\0'; // ensure the data are null-terminated
+#ifdef __linux__
+ master_socket_name[0] = '\0'; // abstract socket, automatically removed after close
+#else
+ unlink(master_socket_name.c_str()); // remove possible stale socket before bind
+ atexit([]() {
+ if (not master_socket_name.empty())
+ unlink(master_socket_name.c_str());
+ master_socket_name.clear();
+ });
+#endif
+
+ struct sockaddr_un serv_addr = {};
+ serv_addr.sun_family = AF_UNIX;
+ master_socket_name.copy(serv_addr.sun_path, MC_SOCKET_NAME_LEN);
+
+ xbt_assert(bind(master_socket_, (struct sockaddr*)&serv_addr, sizeof serv_addr) >= 0,
+ "Cannot bind the master socket to %c%s: %s.", (serv_addr.sun_path[0] ? serv_addr.sun_path[0] : '@'),
+ serv_addr.sun_path + 1, strerror(errno));
+
+ xbt_assert(listen(master_socket_, SOMAXCONN) >= 0, "Cannot listen to the master socket: %s.", strerror(errno));
+
+ application_factory_ = std::make_unique<simgrid::mc::CheckerSide>(app_args_);
+ checker_side_ = application_factory_->clone(master_socket_, master_socket_name);