Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 13dac1d

Browse files
committed
extra check for a closed socket upon connection accept in arbiter
1 parent d49f9fb commit 13dac1d

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

arbiter.c

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -667,14 +667,23 @@ static void MtmAcceptOneConnection()
667667
if (!MtmWriteSocket(fd, &resp, sizeof resp)) {
668668
MTM_ELOG(WARNING, "Arbiter failed to write response for handshake message to node %d", node+1);
669669
pg_closesocket(fd, MtmUseRDMA);
670-
} else {
671-
MTM_LOG1("Arbiter established connection with node %d", node+1);
672-
if (sockets[node] >= 0) {
673-
MtmUnregisterSocket(sockets[node]);
670+
} else {
671+
/* One extra check that socket wasn't already closed by peer */
672+
rc = pg_recv(fd, &req, sizeof(req), MSG_PEEK, MtmUseRDMA);
673+
if (rc == 0)
674+
{
675+
MTM_LOG1("Bad connection request from %d: peer already closed connection", node+1);
676+
pg_closesocket(fd, MtmUseRDMA);
677+
}
678+
else
679+
{
680+
MTM_LOG1("Arbiter accepted connection from node %d fd=%d", node+1, fd);
681+
if (sockets[node] >= 0)
682+
MtmDisconnect(node);
683+
sockets[node] = fd;
684+
MtmRegisterSocket(fd, node);
685+
MtmOnNodeConnect(node+1);
674686
}
675-
sockets[node] = fd;
676-
MtmRegisterSocket(fd, node);
677-
MtmOnNodeConnect(node+1);
678687
}
679688
}
680689
}

0 commit comments

Comments
 (0)