<div dir="ltr"><div><div><br></div>I've been having a problem related to epoll_ctl lately.<br></div><div>You may recall I have a 3-tier system:<br><br></div><div>1. back tier (tcp server)<br></div><div>2. middle tier (udp server)<br>
</div><div>3. front tier<br></div><div><br></div><div>If I kill the middle tier with a control-C and then restart it <br>(without making any requests via the front tier),<br></div><div>the socket descriptor (associated with the middle tier) in <br>
the back tier is 7.  But If I first make some requests via the <br>front tier, then kill the middle tier and then restart it, the <br>socket descriptor is 1 instead of 7.<br><br></div><div>When the socket descriptor is 1, I get an EBADF on<br>
</div><div>an epoll_ctl with an op of EPOLL_CTL_MOD.<br></div><div>It's on the second call to epoll_ctl though (with<br></div><div>same input) that it fails.  The first one is related <br>to logging in and the second one is due to the<br>
</div><div>request via the front tier.  I've tried many things to<br></div><div>get the back tier to not give me the socket descriptor<br></div><div>of 1, but nothing has worked.  I've tried calling <br></div><div>
daemon(), I've tried freopen'ing stdin, stdout, and<br>stderr, and a few other things.  I've tried doing these <br>things only in the parent, only in the child and in both.  <br>Nothing has worked.  Any ideas?<br>
<br></div><div>This problem makes me think more about BSD.  Even if <br>I figure this out, I'm still left with epoll.   If you could have <br>any operating system for running an on line service, what <br>would you pick?  Thanks.<br>
</div><div><div><br>-- <br><div dir="ltr">Brian<br>Ebenezer Enterprises - In G-d we trust.<br><a href="http://webEbenezer.net" target="_blank">http://webEbenezer.net</a><br><br><br></div>
</div></div></div>