🎉」 init: wtf

This commit is contained in:
2025-09-18 21:10:30 +02:00
commit 4ca182e566
14 changed files with 2430 additions and 0 deletions

View File

@ -0,0 +1,42 @@
Имя назначения : 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)