Files
ratio-miniserv/subjects/mini_serv/subject.ru.txt
2025-09-18 21:10:30 +02:00

42 lines
4.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Имя назначения : 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)