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;
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;
}
}
@@ -2886,18 +2887,25 @@ int CClientManager::Process()
switch (fdwatch_check_event(m_fdWatcher, peer->GetFd(), idx))
{
case FDW_READ:
if (peer->Recv() < 0)
switch (peer->Recv())
{
sys_err("Recv failed");
RemovePeer(peer);
}
else
{
if (peer == m_pkAuthPeer)
if (g_log)
sys_log(0, "AUTH_PEER_READ: size %d", peer->GetRecvLength());
case -2:
sys_log(0, "Peer disconnected cleanly. (host=%s peer_handle=%u fd=%d)", peer->GetHost(), peer->GetHandle(), peer->GetFd());
RemovePeer(peer);
break;
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;

View File

@@ -105,7 +105,10 @@ int CPeerBase::Recv()
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;
}
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;
if (ret == 0) // 정상적으로 접속 끊김
{
errno = 0;
return -1;
}
#ifdef EINTR /* Interrupted system call - various platforms */
if (errno == EINTR)