Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > socket connect


Автор: knut 6.2.2010, 00:38
добрый день.
вот пытаюсь отослать простой емаил. но при connect e получаю ошибку 10060 ну вроде тайм аут
Код

if(WSAStartup(MAKEWORD(VERSION_MAJOR, VERSION_MINOR), &WSData))
  {
    cout << "Cannot find Winsock v" << VERSION_MAJOR << "." << VERSION_MINOR << " or later!" << endl;

    return 1;
  }

lpHostEntry = gethostbyname(szSmtpServerName);
  if(!lpHostEntry)
  {
    cout << "Cannot find SMTP mail server " << szSmtpServerName << endl;

    return 1;
  }

hServer = socket(PF_INET, SOCK_STREAM, 0);
  if(hServer == INVALID_SOCKET)
  {
    cout << "Cannot open mail server socket" << endl;
  
    return 1;
  }

  // Get the mail service port
  lpServEntry = getservbyname("mail", 0);

  // Use the SMTP default port if no other port is specified
  if(!lpServEntry)
    iProtocolPort = htons(IPPORT_SMTP);
  else
    iProtocolPort = lpServEntry->s_port;

  // Setup a Socket Address structure
  SockAddr.sin_family = AF_INET;
  SockAddr.sin_port   = iProtocolPort;

SockAddr.sin_addr   = *((LPIN_ADDR)*lpHostEntry->h_addr_list);

  // Connect the Socket
  if(connect(hServer, (PSOCKADDR) &SockAddr, sizeof(SockAddr)))
  {
    DWORD dwError  = GetLastError();  // error 10060
    cout << "Error connecting to Server socket" << endl;

    return 1;
  }


Автор: Олег2005 7.2.2010, 10:49
Код

struct hostent 
{
   char *h_name;         /* Официальное имя хоста.*/
   char **h_aliases;    /* Массив псевдонимов данного хоста, заканчивающийся нулем */
   int  h_addrtype;      /* Тип возвращенного функцией адреса; для Интернет это AF_INET */
   int  h_length;               /* Длина адреса в байтах. Для типа AF_INET длина всегда 4
 байта */
   char **h_addr_list;    /* Указатель на массив указателей IPv4 (IPv6) адресов хоста. Он заканчивается нулем, порядок  следования байтов сетевой. */
#define h_addr h_addr_list[0]/*Определяет h_addr как самый первый адрес хоста в списке*/
};


Поэтому пишут примерно так:
Код

their_addr.sin_addr = * ((struct in_addr *) he -> h_addr);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)