2010-05-10 8 views
1

Je suis en train de créer un client de messagerie POP3 de base dans C++, mais j'ai rencontré un problème. Puisque vous devez définir la taille de la mémoire tampon lors de la construction du programme, mais qu'un message peut être arbitrairement volumineux, comment pouvez-vous, par exemple, faire en sorte que le serveur de messagerie vous l'envoie par parties? Et si ce n'est pas le bon moyen de résoudre le problème, qu'est-ce que c'est?taille de la mémoire tampon pour la connexion socket en C++

Et pendant que je suis ici, quelqu'un peut-il me confirmer que le RFC 2822 est toujours le document définissant la mise en page de courriel?

Merci

+0

Voulez-vous dire le tampon de socket le tampon de courrier un autre tampon non défini. –

Répondre

3

Étant donné que la plupart des messages électroniques utilisent le protocole TCP/IP, vous pouvez lire un octet à la fois si vous le souhaitez. L'implémentation sous-jacente mettra le flux à votre place. Il est reçu environ 1400 octets à la fois hors du réseau. Généralement, j'utilise soit std::vector<char> ou std::string en tant que tampon et lire un octet à la fois et push_back sur le tampon dans une boucle select() avec un délai d'attente court.

Je ne me souviens pas si POP inclut une longueur de ligne maximale ou non. Si c'est le cas, vous pouvez l'utiliser comme taille de votre tampon et appeler reserve() sur le vecteur. Cela permettra de minimiser les réaffectations de mémoire et les copies qui pourraient se produire autrement.

En ce qui concerne la norme la plus récente, http://tools.ietf.org/html/rfc2822 indique qu'elle était obsolète par http://tools.ietf.org/html/rfc5322. Je vérifie habituellement http://tools.ietf.org/html/rfcXXXXXXXX est le numéro de RFC. Si elle est obsolète, alors il y a un lien vers le RFC le plus approprié en haut.

Et pour finir, ne construisez pas un client POP pour le déploiement sans une bonne raison. Il y a beaucoup de trucs enfouis dans les différents RFC. C'est vraiment une bonne expérience d'apprentissage. Que voulez-vous dire définir la taille de la mémoire tampon?

+0

Merci pour tout ça, c'est fantastique. Je n'ai pas vraiment de plans pour utiliser le client du tout, j'aime juste apprendre comment les choses fonctionnent. Je trouve ces jours-ci, avec des implémentations de laissez-faire de POP comme Gmail, même les clients professionnels se désintègrent, donc je ne ferais pas confiance aux miens aussi loin que je pourrais le lancer. – wyatt

0

Si vous lisez à partir d'une prise, vous pouvez spécifier le nombre d'octets que vous souhaitez read. En outre, vous pouvez allouer dynamiquement un tampon au moment de l'exécution en utilisant new.