Ошибка подключения C/C++: EBADF (неверный файловый дескриптор)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ошибка подключения C/C++: EBADF (неверный файловый дескриптор)

Сообщение Anonymous »

Ниже приведен псевдокод:

Код: Выделить всё

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;
}
Весь приведенный выше код выполняется в одном потоке. В некоторых сценариях после вызова функции подключения будет выведена ошибка с кодом errno EBADF, и все последующие операции по установлению соединения также будут выдавать эту ошибку. Каковы возможные причины этого явления?
Эта проблема часто возникает после того, как программа работала в течение определенного периода времени. Соединения, которые были успешно установлены до возникновения ошибки, по-прежнему могут нормально отправлять и получать данные, но любые новые попытки установления соединения обязательно приведут к ошибке.
Не повредила ли это таблицу дескрипторов fd режима ядра?

Подробнее здесь: https://stackoverflow.com/questions/798 ... descriptor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»