Имя назначения : mini_serv Ожидаемые файлы : mini_serv.c Разрешенные функции : write, close, select, socket, accept, listen, send, recv, bind, strstr, malloc, realloc, free, calloc, bzero, atoi, sprintf, strlen, exit, strcpy, strcat, memset -------------------------------------------------------------------------------- Напишите программу, которая будет прослушивать подключение клиента к определенному порту на 127.0.0.1 и позволит клиентам разговаривать друг с другом Эта программа будет принимать в качестве первого аргумента порт для привязки Если аргумент не задан, он должен написать в stderr "Wrong number of arguments", за которым следует a \n и выйти со статусом 1 Если системный вызов возвращает ошибку до того, как программа начнет принимать соединение, она должна написать в stderr "Fatal error", а затем a \n и выйти со статусом 1 Если вы не можете выделить память, он должен написать в stderr "Fatal error", а затем a \n и выйти со статусом 1 Ваша программа должна быть неблокирующей, но клиент может быть ленивым, и если он не читает ваше сообщение, вы не должны отключать его... Ваша программа не должна содержать #define preproc Ваша программа должна слушать только 127.0.0.1 Fd, который вы получите, уже будет настроен на блокировку 'recv' или 'send', если select не был вызван до их вызова, но в противном случае не будет заблокирован. Когда клиент подключается к серверу: - клиенту будет выдано удостоверение личности. первый клиент получит идентификатор 0, а каждый новый клиент получит последний идентификатор клиента + 1 - %d будет заменено на это число - всем клиентам, которые были подключены к серверу, отправляется сообщение: "server: client %d just arrived\n" клиенты должны иметь возможность отправлять сообщения в вашу программу. - сообщение будет состоять только из печатаемых символов, проверять его не нужно - одно сообщение может содержать несколько \n - когда сервер получает сообщение, он должен повторно отправить его всем другим клиентам с "client %d:" перед каждой строкой! Когда клиент отключается от сервера: - всем клиентам, которые были подключены к серверу, отправляется сообщение: "server: client %d just left\n" Утечки памяти или fd запрещены Чтобы помочь вам, вы найдете файл main.c с началом работы сервера и, возможно, некоторые полезные функции. (Остерегайтесь, чтобы этот файл использовал запрещенные функции или писал вещи, которых не должно быть в вашей окончательной программе) Предупреждение наш тестер ожидает, что вы будете отправлять сообщения так быстро, как только сможете. Не делайте ненужного буфера. Оценка может быть немного дольше, чем обычно... Подсказка: вы можете использовать nc для тестирования вашей программы Подсказка: вы должны использовать nc для тестирования вашей программы Подсказка: Для тестирования вы можете использовать fcntl(fd, F_SETFL, O_NONBLOCK), но используйте select и НИКОГДА НЕ проверяйте EAGAIN (man 2 send)