#5706: В глубоком табе

12:00 16.03.2011, IT happens


Знаете, коллеги, я убедился, что университет с мировым именем — не гарантия, что вас не научат индийскому программированию.


Сдаю в бумажном виде госы.


— И где же у вас здесь протокол SMTP?

— Вот это всё — реализация. Вот список команд, вот список кодов ответов…

— Так, где создаётся сокет?


Тыкаю пальцем: server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


— Та-а-ак! Но у вас же здесь TCP!

— Правильно. SMTP — протокол слоя приложения. А при создании сокета указывается транспортный.

— А как тогда отличить, что ваша программа работает про протоколу SMTP? Где это написано?

— По структуре заголовка пакета — никак. По порту разве что.


Показываю на строчку: addr.sin_port = htons(IPPORT_SMTP);


— О! Так вот эта константа. Но она должна быть в протоколе.

— Нет, она должна быть здесь. Даже по имени константы видно, что в протокол она не лезет. Давайте покажу на практике, попробуем подставить эту константу туда и запустить — получим INVALID_SOCKET.

— Так! Что ты тут со мной споришь? В книге было написано, что должен быть IPPORT_SMTP, и прилагались рабочие примеры!

— Покажите, пожалуйста.

— Нету, книга в библиотеке.

— Тогда давайте сейчас покажу на практике, — поворачиваюсь к ближайшей машине, — что моя программа работает. Заодно попробуем туда подставить этот IPPORT…

— Так, иди переделывай.


Позже дома проверил — действительно, сокет не создаётся, если подставить туда любую константу портов. Повторная попытка доказать это провалилась. Пришлось в глубоком табе писать: #define IPPROTO_SMTP IPPROTO_TCP.




Загрузка...