diff options
| author | Grant Limberg <grant.limberg@zerotier.com> | 2018-11-13 16:00:17 -0800 |
|---|---|---|
| committer | Grant Limberg <grant.limberg@zerotier.com> | 2018-11-13 16:00:17 -0800 |
| commit | 01e6df4d46df280b3ad2ae158cb87b5ee98f10d7 (patch) | |
| tree | 231f4ef754a3871456f72895a9ae4899bb4588b8 /osdep/MacEthernetTap.cpp | |
| parent | 882b03436d7b40a788f060e0d83a4027f86e73ef (diff) | |
| parent | 690bd933d52c7dbbcddde7c0aff30f7fee91a6d9 (diff) | |
| download | infinitytier-01e6df4d46df280b3ad2ae158cb87b5ee98f10d7.tar.gz infinitytier-01e6df4d46df280b3ad2ae158cb87b5ee98f10d7.zip | |
Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev
Diffstat (limited to 'osdep/MacEthernetTap.cpp')
| -rw-r--r-- | osdep/MacEthernetTap.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/osdep/MacEthernetTap.cpp b/osdep/MacEthernetTap.cpp index 92df2f31..fb3e3a75 100644 --- a/osdep/MacEthernetTap.cpp +++ b/osdep/MacEthernetTap.cpp @@ -147,7 +147,7 @@ MacEthernetTap::MacEthernetTap( _agentStdin2 = agentStdin[0]; _agentStdout2 = agentStdout[1]; _agentStderr2 = agentStderr[1]; - long apid = (long)vfork(); + long apid = (long)fork(); if (apid < 0) { throw std::runtime_error("fork failed"); } else if (apid == 0) { @@ -155,10 +155,13 @@ MacEthernetTap::MacEthernetTap( ::dup2(agentStdout[1],STDOUT_FILENO); ::dup2(agentStderr[1],STDERR_FILENO); ::close(agentStdin[0]); + ::close(agentStdin[1]); + ::close(agentStdout[0]); ::close(agentStdout[1]); + ::close(agentStderr[0]); ::close(agentStderr[1]); ::execl(agentPath.c_str(),agentPath.c_str(),devnostr,ethaddr,mtustr,metricstr,(char *)0); - ::exit(-1); + ::_exit(-1); } else { _agentPid = apid; } @@ -284,7 +287,9 @@ void MacEthernetTap::put(const MAC &from,const MAC &to,unsigned int etherType,co iov[1].iov_len = 15; iov[2].iov_base = const_cast<void *>(data); iov[2].iov_len = len; + _putLock.lock(); writev(_agentStdin,iov,3); + _putLock.unlock(); } } @@ -356,8 +361,8 @@ void MacEthernetTap::threadMain() const int nfds = std::max(std::max(_shutdownSignalPipe[0],_agentStdout),_agentStderr) + 1; long agentReadPtr = 0; - fcntl(_agentStdout,F_SETFL,O_NONBLOCK); - fcntl(_agentStderr,F_SETFL,O_NONBLOCK); + fcntl(_agentStdout,F_SETFL,fcntl(_agentStdout,F_GETFL)|O_NONBLOCK); + fcntl(_agentStderr,F_SETFL,fcntl(_agentStderr,F_GETFL)|O_NONBLOCK); FD_ZERO(&readfds); FD_ZERO(&nullfds); @@ -393,8 +398,6 @@ void MacEthernetTap::threadMain() break; } } - } else { - break; } } if (FD_ISSET(_agentStderr,&readfds)) { |
