doing it nice or doing it right

We hit an interesting bug this week. When the Linux binaries for QuakeWars dedicated server were running on a BSD system, we failed to open TCP connections. That was caused by subtle differences in behavior of the connect() call. There is a good writeup here.

Our problem was slightly different (we're non blocking), but in the end it comes down to Linux allowing the connect() call to be restarted, whereas BSD follows the standard strictly and requires a different approach. I'm still not sure what to think about this. Not following the spec is bad, but when the spec is clumsy Linux makes it simple..