| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > SMTP сервер |
| Автор: mChief 11.11.2009, 11:01 |
| Помогите разобраться с заданием и подскажите с чего начать. Пробвал читать RFC по SMTP, но понимания что именно нужно делать не пришло Задание звучит так: Написать программу, которая выполняет функции промежуточного SMTP-сервера. Сервер должен получить инструкции от клиента на передачу почты, добавить в заголовок сообщения информацию о промежуточный сервер и передать сообщение другому SMTP-серверу. |
| Автор: GrayCardinal 11.11.2009, 11:03 |
| ИМХО, начать надо с простого сквозного TCP сервера. т.е. Получает команды. отправляет на реальный сервер, и всё это логится... Дальше - дело техники. Набросать простой сервак ? |
| Автор: mChief 11.11.2009, 12:12 |
| Сквозной TCP сервер, я думаю, смогу написать, а как быть дальше? Нужно тогда еще написать псевдо-клиент, который будет отправлять этому серверу готовое письмо с заголовком? И, наверное, еще один псевдо-сервер который будет ловить все эти сообщения, потому как реальные SMTP сервера наверняка меня пошлют |
| Автор: GrayCardinal 11.11.2009, 12:28 |
| А дальше... Сквозным серваком ловите команду DATA, читаете тело письма, добавляете нужный хидер и шлете дальше... |
| Автор: mChief 11.11.2009, 12:42 |
| Начинаю понимать. И еще два вороса: Как лучше будет читать данные из сокета если я знаю что шлет их почтовый клиент? Какой нужен размер буфера? |
| Автор: GrayCardinal 11.11.2009, 15:56 |
| mChief, Первый вопрос не понял. Второй... На любителя. Вплоть до мегабайта. Больше я бы не стал |
| Автор: mChief 12.11.2009, 16:40 | ||
| Неудачно сформулировал первый вопрос Попробовал написать сквозной сервер, подскажите если что не так
Как я понимаю теперь в коде потомка нужно ловить команду DATA и править заголовок письма. |
| Автор: GrayCardinal 12.11.2009, 16:47 |
| Нормально. Только я бы bzero заменил на memset, да результат bind проверил... Добавлено через 59 секунд На счет особенностей. Знаю одну. Конец строки должен быть 0x0D 0x0A. В *nix используется только 0x0A. 0x0D надо ручками добавлять..... |
| Автор: mChief 12.11.2009, 18:48 |
| Спасибо за помощь, дальше я уже допишу |
| Автор: GrayCardinal 12.11.2009, 19:03 |
| mChief, Завсегда пожалуйста... |
| Автор: MAKCim 12.11.2009, 23:15 |
| mChief, во-первых по самому коду, я настоятельно рекомендую компилировать с ключом -Wall и фиксить все warning'и это просто хороший стиль, а иногда позволяет выявить потенциальне баги ;) во-вторых по типу реализации сервера: никогда без особой необходиости не следует юзать форки мультиплексирование ввода-вывода никто не отменял ;) |
| Автор: mChief 16.11.2009, 06:06 |
| MAKCim, спасибо за замечания А можете немного пояснить про форки и мультиплексирование ввода-вывода ? |