diff --git a/lib/tcp_io.c b/lib/tcp_io.c index c2b648d2..8bca3f5d 100644 --- a/lib/tcp_io.c +++ b/lib/tcp_io.c @@ -426,7 +426,7 @@ static void error_cb(socket_t sock, void* arg) { struct tcp_conn* tc = (struct tcp_conn*)arg; if (!tc || tc->sock == SOCKET_INVALID) return; int so_err = 0; socklen_t so_len = sizeof(so_err); - if (getsockopt(tc->sock, SOL_SOCKET, SO_ERROR, &so_err, &so_len) == 0 && so_err == 0) { + if (getsockopt(tc->sock, SOL_SOCKET, SO_ERROR, (char*)&so_err, &so_len) == 0 && so_err == 0) { // Peer полностью закрыл свой сокет (EPOLLHUP) после того, как FIN уже прочитан (fin_remote=1). // EPOLLHUP — level-triggered и «always reported»: если оставить сокет в epoll, каждая итерация // epoll_wait мгновенно вернёт HUP и error_cb зациклится на 100% CPU. Закрываем сокет.