- size = sizeof(*sa);
- } else {
- if (0 > (sock = socket(AF_INET, SOCK_STREAM|SOCK_NONBLOCK|SOCK_CLOEXEC, 0))) {
- perror("Server::isListening socket()");
- return {};
+[[nodiscard]]
+vector<char *> Server::createArgv() {
+ vector<char *> arr;
+
+ pushArg(arr, binary);
+ pushArg(arr, "-v");
+
+ for (auto it = args.cbegin(); it != args.cend(); ++it) {
+ if (holds_alternative<arg_t>(*it)) {
+ // a single argument
+ auto arg = extractArg(get<arg_t>(*it), binary);
+ handleArg(arr, arg, [&it](const string &arg_) {
+ return extractArg(get<arg_t>(*++it), arg_);
+ });
+ } else {
+ // an argument pair
+ auto &[one, two] = get<arg_pair_t>(*it);
+ auto arg_one = extractArg(one, binary);
+ auto arg_two = extractArg(two, arg_one);
+
+ auto next = handleArg(arr, arg_one, [&arg_two](const string &) {
+ return arg_two;
+ });
+
+ if (!next.has_value()) {
+ pushArg(arr, arg_two);
+ }