Nicolas Boichat has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/48623 )
Change subject: base: socket: Add SOCK_CLOEXEC
......................................................................
base: socket: Add SOCK_CLOEXEC
Prevents any forked process (e.g. diod) from holding on the sockets
if gem5 crashes.
This flag is only supported on Linux, so we stub it out on other
platforms.
Bug: 194336737
Test: ls -l /proc/$DIOD_PID/fd shows a lot less fds.
Change-Id: I6bc195ed3bd638ab28ff7690f43afce030fa28c7
---
M src/base/socket.cc
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/src/base/socket.cc b/src/base/socket.cc
index fa61ea4..3510737 100644
--- a/src/base/socket.cc
+++ b/src/base/socket.cc
@@ -43,9 +43,23 @@
#include "base/types.hh"
#include "sim/byteswap.hh"
+// Stub out GNU/Linux extensions for SOCK_CLOEXEC.
+#ifndef _GNU_SOURCE
+static inline int
+accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)
+{
+ if (flags)
+ panic("accept4 stub only accepts flags == 0.");
+ return accept(sockfd, addr, addrlen);
+}
+#endif
+
+#ifndef SOCK_CLOEXEC
+#define SOCK_CLOEXEC 0
+#endif
+
namespace gem5
{
-
bool ListenSocket::listeningDisabled = false;
bool ListenSocket::anyListening = false;
@@ -104,7 +118,7 @@
// only create socket if not already created by a previous call
if (fd == -1) {
- fd = ::socket(PF_INET, SOCK_STREAM, 0);
+ fd = ::socket(PF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);
if (fd < 0)
panic("Can't create socket:%s !", strerror(errno));
}
@@ -150,7 +164,7 @@
{
struct sockaddr_in sockaddr;
socklen_t slen = sizeof (sockaddr);
- int sfd = ::accept(fd, (struct sockaddr *)&sockaddr, &slen);
+ int sfd = ::accept4(fd, (struct sockaddr *)&sockaddr, &slen,
SOCK_CLOEXEC);
if (sfd != -1 && nodelay) {
int i = 1;
if (::setsockopt(sfd, IPPROTO_TCP, TCP_NODELAY, (char *)&i,
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/48623
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I6bc195ed3bd638ab28ff7690f43afce030fa28c7
Gerrit-Change-Number: 48623
Gerrit-PatchSet: 1
Gerrit-Owner: Nicolas Boichat <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s