linux: add CLOEXEC flag to miscellaneous calls

Günther Brammer 2012-03-05 02:48:27 +01:00
parent 3755a36dd1
commit 1929e8d779
3 changed files with 8 additions and 9 deletions

View File

@ -850,7 +850,11 @@ C4NetIOTCP::Peer *C4NetIOTCP::Accept(SOCKET nsock, const addr_t &ConnectAddr) //
if (nsock == INVALID_SOCKET)
{
// accept from listener
#ifdef __linux__
if ((nsock = ::accept4(lsock, reinterpret_cast<sockaddr *>(&addr), &iAddrSize, SOCK_CLOEXEC)) == INVALID_SOCKET)
#else
if ((nsock = ::accept(lsock, reinterpret_cast<sockaddr *>(&addr), &iAddrSize)) == INVALID_SOCKET)
#endif
{
// set error
SetError("socket accept failed", true);

View File

@ -32,7 +32,8 @@
C4FileMonitor::C4FileMonitor(ChangeNotify pCallback): fStarted(false), pCallback(pCallback)
{
fd = inotify_init();
fd = inotify_init1(IN_CLOEXEC);
if (fd == -1) fd = inotify_init();
if (fd == -1) LogF("inotify_init %s", strerror(errno));
}

View File

@ -555,12 +555,9 @@ bool CStdNotifyProc::CheckAndReset()
CStdNotifyProc::CStdNotifyProc()
{
// FIXME: Once linux version 2.6.27 is required, use EFD_NONBLOCK and EFD_CLOEXEC
fds[0] = eventfd(0, 0);
fds[0] = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
if (fds[0] == -1)
Fail("eventfd failed");
fcntl(fds[0], F_SETFL, fcntl(fds[0], F_GETFL) | O_NONBLOCK);
fcntl(fds[0], F_SETFD, FD_CLOEXEC);
}
CStdNotifyProc::~CStdNotifyProc()
{
@ -689,12 +686,9 @@ bool CStdMultimediaTimerProc::CheckAndReset()
#include <fcntl.h>
CStdMultimediaTimerProc::CStdMultimediaTimerProc(uint32_t iDelay)
{
// FIXME: Once linux version 2.6.27 is required, use TFD_NONBLOCK and TFD_CLOEXEC
fd = timerfd_create(CLOCK_MONOTONIC, 0);
fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC);
if (fd == -1)
Log("timerfd_create failed");
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK);
fcntl(fd, F_SETFD, FD_CLOEXEC);
SetDelay(iDelay);
}