The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"ESMTP, чтение-запись в сокеты"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"ESMTP, чтение-запись в сокеты"  +/
Сообщение от Vedmak (ok) on 09-Июл-09, 01:17 
2. Увидел в протоколе ESMTP, что может быть несколько ответов:
ehlo office.company1.tld
250-mail.company2.tld is pleased to meet you
250-DSN
250-SIZE
250-STARTTLS
250-AUTH LOGIN PLAIN CRAM-MD5 DIGEST-MD5 GSSAPI MSN NTLM
250-ETRN
250-TURN
250-ATRN
250-NO-SOLICITING
250-HELP

Хотя про SMTP было написано в той же Википедии, что ответ всегда 1 строка. (То есть, когда реализуешь протокол SMTP, надо дождаться приема символов 0D 0A в ответ, да?)

Telnet (стандартный, из FreeBSD) работает по схеме "ввели 1 символ - послали", да? И вообще при такой передаче, получив один символ на любой стороне, никак нельзя сказать, собирается ли вторая сторона послать за ним еще символы (считая их неразрывным по смыслу целым) или нет? Т.е. нужно ждать определенного признака, например того же 0D 0A (cr lf)?

Как же тогда можно работать по протоколу ESMTP, ведь откуда клиент знает, сколько строчек ему послал сервер?


3. Что должна делать нормальная функция приема ответа от сервера? Где можно найти ее схему. Имеется в виду надежное соединение, по TCP.
Например, есть такая книжка - Теренс Чан. Системное программирование на C++ для Unix. Так у него ничего из нижеперечисленного нету (просто вызов recv(), подразумевается, что он примет абсолютно все данные, посланные другой стороной по одному вызову send(), за один вызов recv). А я современные функции почитал - там целая куча всего.
- Вроде бы количество прочитанных байт 0 означает, что у той стороны, наконец, нет ничего, что бы она хотела нам послать. Но с другой стороны, вторая сторона вроде в любой момент может передумать и решить послать еще данные, новым вызовом send... С другой стороны походит, что возврат recv 0 прочитанных байт сродни нулю в ASCIIZ-строке, разделяющему одну строку из идущих подряд от другой. А если мы не успели дочитать первую строку “KISA1”, сервер послал уже вторую “KISA2”... То прочитав 0, мы можем подумать, что более нам ничего не посылали, в то время как там еще вторая строка? Или это неправда? Т.е. что мы прочитаем из сокета: 5 байт + “KISA1” – 0 байт – 5 байт + “KISA2” – 0 байт ? Или : 5 байт + “KISA1”  –  5 байт + “KISA2” – 0 байт? Или 10 байт + “KISA1KISA2” – потом 0 байт?
- Если прочитано не 0 байт из сокета, то большинство функций чтения (не как у Чана!) читают и читают, пока не прочитают 0 байт.
- Надо как-то ловить разрывы соединения (по ошибке) и нормальное закрытие сокета второй стороной (как???? У Теренса Чана об этом ничего не сказано).

Можно ли различить на второй стороне 2 случая: а) первая сторона послала туда первым вызовом send() строку из 40 байт, вторым – еще строку из 40 байт; б) первая сторона послала все 80 байт одним вызовом send(). Я подумывал, что функция recv возвращает 0 прочитанных байт, именно чтобы дать знать, что кончились за один раз посланные данные. Т.е. например в случае с ESMTP когда очередное обращение вернет 0 прочитанных байт, значит мы дочитали все строчки этого длинного ответа сервера (см. выше про ESMTP). А то может быть, если сообщение шло частями (не гарантируется доставка мгновенно и всего сразу), то может ли быть так, что прочитается из сокета первая часть сообщения, а потом, т.к. остаток еще не пришел, то прочитается 0 байт?? Не преждевременно ли будет в таком случае считать ответ полностью полученным. И может ли такое случиться.

Все вопросы http://unixvop.narod.ru/

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "ESMTP, чтение-запись в сокеты"  +/
Сообщение от angra (ok) on 09-Июл-09, 14:47 
man и чтение исходников в помощь. Форумы не предназначены для заочного обучения программированию.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "ESMTP, чтение-запись в сокеты"  +/
Сообщение от Vedmak (ok) on 09-Июл-09, 17:36 
>man и чтение исходников в помощь. Форумы не предназначены для заочного обучения
>программированию.

Тогда порекомендуйте такие форумы.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "ESMTP, чтение-запись в сокеты"  +/
Сообщение от Vedmak (ok) on 09-Июл-09, 18:43 
>man и чтение исходников в помощь. Форумы не предназначены для заочного обучения
>программированию.

По-вашему, раздел форума «Программирование под UNIX» не предназначен для помощи по программированию. Браво, доктор Геббельс!

Вообще «учить» программирование – это не то, чем я сейчас занимаюсь. Я по счастью программирую уже с 1989 года, сейчас же хотел разобраться с некоторыми частными деталями под относительно новую для меня платформу. Создал вполне корректную тему с вполне конкретными вопросами, на которые можно дать конкретный ответ. Как вежливый человек стал ожидать вежливых ответов от других людей по теме.

Я, когда регистрировался на этом форуме и создавал темы, был очень рад, т.к. тут много ключевых тем при создании треда – «Демоны и сигналы», «Потоки, треды, RPC» и пр. Мне казалось, это свидетельствовало об определенном уровне форума. На том же форуме www.linux.org.ru беднее: есть только подфорум «Development». А вот сейчас смотрю – здесь только я создаю темы такого уровня, все темы рядом носят такие ключевые слова: «Perl», «Разное», «Компиляция, оптимизация и отладка» и пр. Для чего же такие варианты были вообще созданы? Видимо, angra получил вопрос, ответ на который находится явно выше его уровня, вот и обозлился.

Вот например на sources.ru сидят модераторы, и там запрещены ответы «читайте man», «гугль в помощь» и т.д.
Ну как на этот вопрос можно ответить, читая man – знает только больное воображение.

Поставил слежение за участником angra и чуть не прифигел, видя, как он опускает всех остальных. Видимо, нанят, чтобы отбить желание пользоваться услугами этого форума.

На форуме www.linux.org.ru я получил нормальные, корректные, вежливые ответы. Здесь ничего по существу вопроса я не получил, зато несколько человек ринулось на меня с целью обгадить. Теперь понятно, почему цвет веб-морды этого форума коричневый!

Засим удаляюсь – на этом г...офоруме ничего полезного не сделаешь.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "ESMTP, чтение-запись в сокеты"  +/
Сообщение от Андрей (??) on 10-Июл-09, 01:20 
вот чёрт, я ответ написал, а человек оказывается ужё ушёл обиженный на весь форум.
надо мне изменить протокол обработки форума.
Вначале всё прочитать, потом отвечать, если есть необходимость.
Может быть RFC написать для этого.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "ESMTP, чтение-запись в сокеты"  +/
Сообщение от Андрей (??) on 10-Июл-09, 01:16 
Описание протокола лучше читать в соответствующем документе, а не в Википедии.
например в RFC-1869 (http://www.ietf.org/rfc/rfc1869.txt) Там подробно описано, что и когда ожидать.
Функции send и recv служат для посылки и приёма данных, они ничего не знают о том какие данные передаются. Эти функции могут использоваться для реализации протокола обмена данными между клиентом и сервером. Как происходит этот обмен зависит от описания и реализации протокола. В случае с ESMTP ответ EHLO выглядит следующим образом
ehlo-ok-rsp  ::=      "250"    domain [ SP greeting ] CR LF
               / (    "250-"   domain [ SP greeting ] CR LF
                   *( "250-"      ehlo-line           CR LF )
                      "250"    SP ehlo-line           CR LF   )
подробности в RFC1869 а также в
man recv
man send
man signal
можно ещё посмотреть RFC793 (http://tools.ietf.org/rfc/rfc793.txt)

Обратите внимание на знак минус в описании ehlo-ok-rsp

Кстати в Википедии есть интересный раздел http://en.wikipedia.org/wiki/OSI_model

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру