Системное программирование, сокеты
Все программы должны соответствовать принятому стилю кодирования.
- В начале файла - заголовок с автором и лицензией;
- Перед каждой функцией - комментарий с описанием функции и аргументов;
- Текст программы разбит на "абзацы" с комментарием перед каждым "абзацем".
Все возвращаемые функциями значения должны проверяться. В случае ошибок выполнение программы должно аварийно завершаться с выдачей сообщения об ошибке и кодом завершения EXIT_FAILURE.
Сокеты
- Написать программу для иллюстрации преобразования порядка байт:
- получить один обязательный аргумент командной строки - беззнаковое целое 32-битное число и сохранить в переменной
- затем вывести содержимое ячеек памяти, в которых хранится эта переменная
- преобразовать число в сетевой порядок байт и сохранить в другой переменной
- вывести содержимое ячеек памяти, в которых хранится новая переменная
- преобразовать получившееся число в презентационный формат (строка) и вывести
>./a.out 0x01020304 host byte order: s_addr=0x01020304, 0x04:0x03:0x02:0x01 network byte order: s_addr=0x04030201, 0x01:0x02:0x03:0x04 s=1.2.3.4
- Написать программу для получения всех IP-адресов по имени хоста (если это возможно):
> host ya.ru YA.ru has address 87.250.250.242 YA.ru has IPv6 address 2a02:6b8::2:242 ...
- Написать программу для получения имени хоста по IP-адресу (если это возможно):
> host 8.8.8.8 8.8.8.8.in-addr.arpa domain name pointer google-public-dns-a.google.com. > host 1.2.3.4 Host 4.3.2.1.in-addr.arpa. not found: 3(NXDOMAIN)
- Написать TCP эхо-сервер:
- один обязательный аргумент командной строки - номер порта
- создать TCP-сокет, назначить ему полученный номер порта, принимать входящие соединения
- для каждого нового соединения:
- вывести информацию о том, откуда пришло соединение (IP-адрес и порт)
- создать процесс, который все полученные данные будет отправлять обратно
- после закрытия соединения порожденный процесс должен корректно завершаться (не оставаться в состоянии zombie)
> echo test | netcat -q1 kappa echo test