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