From: Nicholas N. <n.n...@gm...> - 2009-04-28 07:03:34
|
Hi, none/tests/fdleak_ipv4 doesn't work on Darwin. I can't work out why, but I don't know much about network programming. If anyone who does (Filipe?) it would be very helpful. The program forks and creates a client process and a server process. If the server process runs first and reaches accept() before the client tries to connect(), it works fine. I tested this by inserting a sleep() in the client. But without that sleep(), on my machine usually the client reaches connect() first. It fails with "connection refused", which is reasonable, because the server hasn't started listening/accepting connections. But then on the retry, after the sleep(1), the connect() fails with an invalid argument. And this repeats 10 times around the client's connect() loop until the client gives up. It's the invalid argument errors that I don't understand. I looked at the xnu kernel sources, AFAICT the only way to get EINVAL from connect() is to make the 3rd arg (address_len) too small but that's definitely not the case. Besides, if we don't get EINVAL on the first try, why should we get it on subsequent tries with identical arguments? Finally, the server process never shuts down, it just hangs waiting for accept(), which complicates subsequent runs. Any ideas? I attach a version which prints messages before and after each network operation, which makes it easier to debug. Nick |