Тайм-аут сокета в C++ Linux

Вам не нужно использовать класс MailAddress.

Вы можете позволить среде выполнения проанализировать вашу строку.

var message = new MailMessage(
    "My Name my@name.com", 
    "Recipient One recipient@one.com,Recipient Two recipient@two.com",
    "Subject",
    "Body");
8
задан Community 23 May 2017 в 12:30
поделиться

3 ответа

The easiest is to setup an alarm and have connect be interrupted with a signal (see UNP 14.2):


signal( SIGALRM, connect_alarm ); /* connect_alarm is you signal handler */
alarm( secs ); /* secs is your timeout in seconds */
if ( connect( fs, addr, addrlen ) < 0 )
{
    if ( errno == EINTR ) /* timeout */
        ...
}
alarm( 0 ); /* cancel alarm */

Though using select is not much harder :)
You might want to learn about raw sockets too.

7
ответ дан 5 December 2019 в 17:40
поделиться

Если вы твердо настроены использовать блокирующий ввод-вывод для выполнения этой задачи, вам следует изучить вызов setsockopt (), в частности флаг SO_SNDTIMEO (или другие флаги, в зависимости от вашей ОС).

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

Традиционный / лучший способ сделать это - использовать неблокирующий подход, который использует select (). Если вы новичок в сокетах, одна из лучших книг - TCP / IP Illustrated, Volume 1: The Protocols. Это на Amazon по адресу: http://www.amazon.com/TCP-Illustrated-Protocols-Addison-Wesley-Professional/dp/0201633469

2
ответ дан 5 December 2019 в 17:40
поделиться

RudeSocket Решила проблему

Я нашел файл lib, который протестирован в Linux Fedora (не Конечно, насчет Windows), что дает мне возможность тайм-аута. Ниже вы можете найти очень простой пример.

#include <rude/socket.h>
#include <iostream>

using namespace std;
using namespace rude;

Socket soc;
soc.setTimeout(30, 5);

//Try connecting
if (soc.connect("xxx.xxx.xxx.xxx", 80)){

    cout << "Connected to xxx.xxx.xxx.xxx on Port " << 80 << "\n";
}

//connections Failed
else{
    cout << "Timeout to xxx.xxx.xxx.xxx on Port " << 80 << "\n";
}

soc.close();

Вот ссылка на DevSite

1
ответ дан 5 December 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: