<div dir="ltr">Previously I wrote something like this:<br><div><div id=":rz" class="">
<br>> I've been having a problem related to epoll_ctl() lately.<br>
> I have a 3-tier system:<br>
><br>
> 1. back tier (tcp server)<br>
> 2. middle tier (udp server)<br>
> 3. front tier<br>
><br>
> The problem is happening in the back tier.<br>
> If I kill the middle tier with a control-C and then restart it<br>
> (before making any requests via the front tier), the socket<br>
> descriptor (associated with the middle tier) in the back tier<br>
> is 7.  But If I first make some requests via the  front tier,<br>
> then kill the middle tier and restart it, the socket descriptor<br>
> is 1.<br>
><br>> When the socket descriptor is 1, I get an EBADF on<br>
> an epoll_ctl with an op of EPOLL_CTL_MOD.<br>
> It's not on the first call to epoll_ctl that it fails, but the third<br>
> call.  My debugging shows that the epfd and fd are the same<br>
> for all three of these calls.<br>
><br>
> I've tried many things to get the back tier to not give me<br>
> the socket descriptor of 1.  I've tried calling daemon(),<br>
> freopen'ing stdin, stdout, and stderr, and a few other<br>
> things.  I've tried doing these things only in the parent,<br>
> only in the child and in both.  Nothing has worked.<br>> Any ideas? <br>
</div>><br>> 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 clear="all"><br></div><div>I ported my back tier to BSD now and the problem I described<br>above has vanished.  Also the back tier is significantly smaller <br>
than it was under Linux.   After 15 years of using Linux, I was <br>reluctant to take this step and even thought about trying a distro <br>based on 3.15 (I was having the problem on 3.13).  So far I'm <br>happy with BSD.  Its kqueue api is quite a bit better than <br>
Linux' epoll api.<br></div><div><br></div><div>One difference in working with BSD is that I have to use<br></div><div>::1 in order to tell the middle tier that the back tier is running<br>on the same machine.  On Linux I have to use 127.0.0.1.<br>
</div><div>Are there any conditional compilation macros for BSD so I<br></div><div>could write<br><br></div><div>#ifdef platform_name<br>  connect_wrapper("::1",56789);<br></div><div>#else<br>  connect_wrapper("127.0.0.1",56789);<br>
</div><div>#endif<br></div><div><br></div><div>?<br><br></div><div>Is the ip command available on BSD?  I've heard it's<br></div><div>better than ifconfig, but I've only found ifconfig on BSD.<br><br></div><div>
I've installed PCBSD successfully on two machines, but<br></div><div>I'm having trouble installing it on a third machine.<br></div><div>My boot menu lists my flash drive under both UEFI and <br>Legacy Boot Sources.  I've tried both. When I try UEFI.<br>
it comes back with:<br></div><div><br></div><div>Welcome to GRUB!<br><br></div><div>error: disk `' not found.<br></div><div>Entering rescue mode...<br></div><div>grub rescue><br></div><div><br><br></div><div>When I try the legacy one it tries to get a dhcp lease.  That <br>
seems to time out and then it starts booting up Linux from<br></div><div>the hard drive.<br></div><div><br></div><div>IIrc, in the past I've had to use the legacy option, but now<br></div><div>acts like one of the other options and not like what it says<br>
it is.  Any ideas on this?  Thanks.<br></div><div><br></div><div>-- <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>
</div>
</div></div>