Код: Выделить всё
addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_NUMERICHOST;
char port_str[6];
int status = snprintf(port_str, sizeof(port_str), "%d", port);
if (status < 0 || status >= static_cast(sizeof(port_str))) {
return nullptr;
}
addrinfo* addr = nullptr;
status = getaddrinfo(ip.c_str(), port_str, &hints, &addr);
if (status != 0) {
return nullptr;
}
//create socket
int fd = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
if (fd ai_addr, addr->ai_addrlen);
if (ret == 0){
//connect success
} else if (errno == EINPROGRESS || errno == EAGAIN) {
//do something
} else {
LOGE("connect fail, errno:%d", errno);
return nullptr;
}
Эта проблема часто возникает после того, как программа работала в течение определенного периода времени. Соединения, которые были успешно установлены до возникновения ошибки, по-прежнему могут нормально отправлять и получать данные, но любые новые попытки установления соединения обязательно приведут к ошибке.
Не повредила ли это таблицу дескрипторов fd режима ядра?
Подробнее здесь: https://stackoverflow.com/questions/798 ... descriptor
Мобильная версия