Fix socket file descriptor leaks
Reviewers: mtomic Reviewed By: mtomic Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D1267
This commit is contained in:
parent
d673d692cb
commit
f3da6a7bf3
@ -70,6 +70,10 @@ bool Socket::Connect(const Endpoint &endpoint) {
|
|||||||
socket_ = sfd;
|
socket_ = sfd;
|
||||||
endpoint_ = endpoint;
|
endpoint_ = endpoint;
|
||||||
break;
|
break;
|
||||||
|
} else {
|
||||||
|
// If the connect failed close the file descriptor to prevent file
|
||||||
|
// descriptors being leaked
|
||||||
|
close(sfd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,12 +92,20 @@ bool Socket::Bind(const Endpoint &endpoint) {
|
|||||||
if (sfd == -1) continue;
|
if (sfd == -1) continue;
|
||||||
|
|
||||||
int on = 1;
|
int on = 1;
|
||||||
if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0)
|
if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0) {
|
||||||
|
// If the setsockopt failed close the file descriptor to prevent file
|
||||||
|
// descriptors being leaked
|
||||||
|
close(sfd);
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (bind(sfd, it->ai_addr, it->ai_addrlen) == 0) {
|
if (bind(sfd, it->ai_addr, it->ai_addrlen) == 0) {
|
||||||
socket_ = sfd;
|
socket_ = sfd;
|
||||||
break;
|
break;
|
||||||
|
} else {
|
||||||
|
// If the bind failed close the file descriptor to prevent file
|
||||||
|
// descriptors being leaked
|
||||||
|
close(sfd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,6 +115,10 @@ bool Socket::Bind(const Endpoint &endpoint) {
|
|||||||
struct sockaddr_in6 portdata;
|
struct sockaddr_in6 portdata;
|
||||||
socklen_t portdatalen = sizeof(portdata);
|
socklen_t portdatalen = sizeof(portdata);
|
||||||
if (getsockname(socket_, (struct sockaddr *)&portdata, &portdatalen) < 0) {
|
if (getsockname(socket_, (struct sockaddr *)&portdata, &portdatalen) < 0) {
|
||||||
|
// If the getsockname failed close the file descriptor to prevent file
|
||||||
|
// descriptors being leaked
|
||||||
|
close(socket_);
|
||||||
|
socket_ = -1;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user