// return general response code from server or -1 if no valid *numeric* // response was received. throws exSock() in case of non-recoverable error if strict==true int response(istream& s, bool strict = true); { int n=-1; // first 3 characters of server response is numeric - so read them at single step s >> n; if (n > 100) n /= 100; if (n == -1 || (n != 2 && n != 3) && strict) // something went wrong throw exSock(); // skip the human-readable part of response we won't analyze or show it to user s.ignore(0, ' '); return n; } int main(int argc, char* argv[]) { try { iosockinet smtp; smtp->connect(«smtp.somehost.ru», 25); // ignore initial server message - some servers will be quiet if (smtp->is_readready(5)) response(smtp, false); smtp << «HELO « << smtp->localhost() << endl; response(smtp); smtp << «MAIL FROM: <» << argv[3] << «>» << endl; response(smtp); smtp << «RCPT TO: <» << argv[4] << «>» << endl; response(smtp); smtp << «DATA» << endl; response(smtp); smtp << «Hello from STL world!» << endl << «.» << endl; response(smtp); smtp << «QUIT» << endl; response(smtp); smtp->close(); } catch(basic_ex& e) { cout << endl << «Fatal error: « << e.what() << «, code: « << e.code(); } ... }