db: clarify peer disconnect diagnostics
Some checks failed
build / Linux asan (push) Has been cancelled
build / Linux release (push) Has been cancelled
build / FreeBSD build (push) Has been cancelled

This commit is contained in:
server
2026-04-14 16:23:33 +02:00
parent bba87f939f
commit f702a64305
3 changed files with 26 additions and 12 deletions

View File

@@ -2500,7 +2500,8 @@ void CClientManager::ProcessPackets(CPeer * peer)
break; break;
default: default:
sys_err("Unknown header (header: %d handle: %d length: %d)", header, dwHandle, dwLength); sys_err("Unknown header (header=%u packet_handle=%u length=%u peer_handle=%u host=%s recv=%d processed=%d)",
header, dwHandle, dwLength, peer->GetHandle(), peer->GetHost(), peer->GetRecvLength(), i);
break; break;
} }
} }
@@ -2886,18 +2887,25 @@ int CClientManager::Process()
switch (fdwatch_check_event(m_fdWatcher, peer->GetFd(), idx)) switch (fdwatch_check_event(m_fdWatcher, peer->GetFd(), idx))
{ {
case FDW_READ: case FDW_READ:
if (peer->Recv() < 0) switch (peer->Recv())
{ {
sys_err("Recv failed"); case -2:
RemovePeer(peer); sys_log(0, "Peer disconnected cleanly. (host=%s peer_handle=%u fd=%d)", peer->GetHost(), peer->GetHandle(), peer->GetFd());
} RemovePeer(peer);
else break;
{
if (peer == m_pkAuthPeer)
if (g_log)
sys_log(0, "AUTH_PEER_READ: size %d", peer->GetRecvLength());
ProcessPackets(peer); case -1:
sys_err("Recv failed (host=%s peer_handle=%u fd=%d)", peer->GetHost(), peer->GetHandle(), peer->GetFd());
RemovePeer(peer);
break;
default:
if (peer == m_pkAuthPeer)
if (g_log)
sys_log(0, "AUTH_PEER_READ: size %d", peer->GetRecvLength());
ProcessPackets(peer);
break;
} }
break; break;

View File

@@ -105,7 +105,10 @@ int CPeerBase::Recv()
if (bytes_read < 0) if (bytes_read < 0)
{ {
sys_err("socket_read failed %s", strerror(errno)); if (errno == 0)
return -2;
sys_err("socket_read failed: host=%s fd=%d errno=%d (%s)", m_host, m_fd, errno, strerror(errno));
return -1; return -1;
} }
else if (bytes_read == 0) else if (bytes_read == 0)

View File

@@ -45,7 +45,10 @@ int socket_read(socket_t desc, char* read_point, size_t space_left)
return ret; return ret;
if (ret == 0) // 정상적으로 접속 끊김 if (ret == 0) // 정상적으로 접속 끊김
{
errno = 0;
return -1; return -1;
}
#ifdef EINTR /* Interrupted system call - various platforms */ #ifdef EINTR /* Interrupted system call - various platforms */
if (errno == EINTR) if (errno == EINTR)