forked from OSchip/llvm-project
[LLDB][NFC] Reliability fixes to TCPSocket code
Patch the following issues found by static code inspection: - Unchecked return values from lib calls - Passing potentially negative arg into a function that requires non-negative input - Possible socket double-close Differential Revision: https://reviews.llvm.org/D131294
This commit is contained in:
parent
5e9b6a2243
commit
aa4977f2e1
|
@ -174,7 +174,10 @@ Status TCPSocket::Connect(llvm::StringRef name) {
|
|||
continue;
|
||||
}
|
||||
|
||||
SetOptionNoDelay();
|
||||
if (-1 == SetOptionNoDelay()) {
|
||||
Close();
|
||||
continue;
|
||||
}
|
||||
|
||||
error.Clear();
|
||||
return error;
|
||||
|
@ -200,15 +203,18 @@ Status TCPSocket::Listen(llvm::StringRef name, int backlog) {
|
|||
for (SocketAddress &address : addresses) {
|
||||
int fd = Socket::CreateSocket(address.GetFamily(), kType, IPPROTO_TCP,
|
||||
m_child_processes_inherit, error);
|
||||
if (error.Fail())
|
||||
if (error.Fail() || fd < 0)
|
||||
continue;
|
||||
|
||||
// enable local address reuse
|
||||
int option_value = 1;
|
||||
set_socket_option_arg_type option_value_p =
|
||||
reinterpret_cast<set_socket_option_arg_type>(&option_value);
|
||||
::setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, option_value_p,
|
||||
sizeof(option_value));
|
||||
if (-1 == ::setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, option_value_p,
|
||||
sizeof(option_value))) {
|
||||
CLOSE_SOCKET(fd);
|
||||
continue;
|
||||
}
|
||||
|
||||
SocketAddress listen_address = address;
|
||||
if(!listen_address.IsLocalhost())
|
||||
|
@ -255,8 +261,8 @@ Status TCPSocket::Accept(Socket *&conn_socket) {
|
|||
return error;
|
||||
}
|
||||
|
||||
int sock = -1;
|
||||
int listen_sock = -1;
|
||||
int sock = kInvalidSocketValue;
|
||||
int listen_sock = kInvalidSocketValue;
|
||||
lldb_private::SocketAddress AcceptAddr;
|
||||
MainLoop accept_loop;
|
||||
std::vector<MainLoopBase::ReadHandleUP> handles;
|
||||
|
@ -288,7 +294,10 @@ Status TCPSocket::Accept(Socket *&conn_socket) {
|
|||
|
||||
lldb_private::SocketAddress &AddrIn = m_listen_sockets[listen_sock];
|
||||
if (!AddrIn.IsAnyAddr() && AcceptAddr != AddrIn) {
|
||||
CLOSE_SOCKET(sock);
|
||||
if (kInvalidSocketValue != sock) {
|
||||
CLOSE_SOCKET(sock);
|
||||
sock = kInvalidSocketValue;
|
||||
}
|
||||
llvm::errs() << llvm::formatv(
|
||||
"error: rejecting incoming connection from {0} (expecting {1})",
|
||||
AcceptAddr.GetIPAddress(), AddrIn.GetIPAddress());
|
||||
|
|
Loading…
Reference in New Issue