Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Message-ID: <3C50520B.3239FAC5@ieee.org> Date: Thu, 24 Jan 2002 13:27:24 -0500 From: "Pierre A. Humblet" X-Mailer: Mozilla 4.73 [en] (WinNT; U) X-Accept-Language: en,pdf MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: socket/fdopen/exec problem Content-Type: multipart/mixed; boundary="------------5EF47D03C81762295A8FF33B" --------------5EF47D03C81762295A8FF33B Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit The attached file demonstrates a problem with a combination of socket, fdopen and exec. It was observed on Win98/ME/NT4/2000. Latest everything. Please cc: me directly. A server is listening on port 999 and forking worker processes. It can be restarted by kill -HUP. Under some conditions, new connections stop being accepted and netstat -a shows two listen on port 999. The demo is based on a widely ported program (exim) where the problem first surfaced. It appears to be related to the use of fdopen(). To reproduce: 1) Compile and run in a window. 2) In another window, a) telnet localhost 999 then quit b) kill -HUP pid c) netstat -a shows two listen on port 999 New connections may or may not be accepted, and mayhem can occasionally be observed with netstat. Yes, all sockets are closed. No, playing with the "close on exec" bit or with "linger" does not seem to help. Pierre --------------5EF47D03C81762295A8FF33B Content-Type: application/x-unknown-content-type-c_auto_file; name="tcpdemo.c" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="tcpdemo.c" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqDQog UGllcnJlIEEuIEh1bWJsZXQuIEphbiAyNCwgMjAwMg0KDQogVGhpcyBkZW1vIHByb2dyYW0g ZXhwb3NlcyBhIGJ1ZyB3aGVyZSB0aGVyZQ0KIGFyZSB0d28gbGlzdGVuIG9uIHRoZSBzYW1l IHRjcCBwb3J0Lg0KIE5ldyBjb25uZWN0aW9ucyBtYXkgb3IgbWF5IG5vdCBiZSBhY2NlcHRl ZCANCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8N CiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPGVycm5vLmg+DQojaW5jbHVkZSA8c3Ry aW5nLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0K I2luY2x1ZGUgPHNpZ25hbC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCiNpbmNsdWRl IDx1bmlzdGQuaD4NCg0KZW51bSB7RkFMU0UsIFRSVUV9Ow0Kc3RhdGljIGludCBzaWdodXBf c2VlbjsNCnN0YXRpYyBpbnQgY2FsbF9zZWVuOw0KDQovKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiAgICAgICAgICAgICBTSUdIVVAgSGFu ZGxlciAgICAgICAgICAgICAgICAgICAgICoNCioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovDQpzdGF0aWMgdm9pZA0Kc2lnaHVwX2hhbmRsZXIo aW50IHNpZykNCnsNCnNpZyA9IHNpZzsgICAgLyogS2VlcCBwaWNreSBjb21waWxlcnMgaGFw cHkgKi8NCnNpZ2h1cF9zZWVuID0gVFJVRTsNCnNpZ25hbChTSUdIVVAsIHNpZ2h1cF9oYW5k bGVyKTsNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioNCiogICAgICAgICAgICAgbWFpbiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLw0KbWFpbihpbnQgYXJnYywgY2hhciAqIGFyZ3ZbXSkNCnsNCiAgaW50IG9uID0gMSwg c29ja2ZkLCBuZXdzb2NrZmQsIGxjb3VudCwgcGVlcl9zaXplLCBwaWQ7DQogIHN0cnVjdCBz b2NrYWRkcl9pbiBhZGRyLCBwZWVyOw0KICBmZF9zZXQgc2VsZWN0X2xpc3RlbjsNCiAgRklM RSAqb3V0ZmQ7DQoNCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKg0KICAgKg0KICAgT3BlbiBhIHNvY2tldCBhbmQgbGlzdGVuIG9uIHBvcnQg OTk5DQoNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLw0KDQogIHNvY2tmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7DQog IGlmIChzb2NrZmQgPCAwKSANCiAgICBwcmludGYoInNvY2tldDogJXNcbiIsIHN0cmVycm9y KGVycm5vKSk7DQoNCiAgaWYgKHNldHNvY2tvcHQoc29ja2ZkLCBTT0xfU09DS0VULCBTT19S RVVTRUFERFIsICZvbiwgc2l6ZW9mKG9uKSkgPCAwKQ0KICAgIHByaW50Zigic2V0c29ja29w dDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQogIA0KICBtZW1zZXQoJmFkZHIsIDAsIHNp emVvZihhZGRyKSk7DQogIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogIGFkZHIuc2lu X3BvcnQgPSBodG9ucyg5OTkpOw0KICBhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9B Tlk7DQogIGlmIChiaW5kKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6 ZW9mKGFkZHIpKSA8IDApDQogICAgcHJpbnRmKCJiaW5kOiAlc1xuIiwgc3RyZXJyb3IoZXJy bm8pKTsNCiAgDQogIGlmIChsaXN0ZW4oc29ja2ZkLCAyKSA8IDApIA0KICAgIHByaW50Zigi bGlzdGVuOiAlZCAlc1xuIiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7DQogDQogIHNpZ2h1 cF9zZWVuID0gRkFMU0U7DQogIHNpZ25hbChTSUdIVVAsIHNpZ2h1cF9oYW5kbGVyKTsNCg0K ICBjYWxsX3NlZW4gPSBGQUxTRTsNCiAgcGlkID0gZ2V0cGlkKCk7DQoNCiAgLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgKg0KICAgTm93 IHdhaXQgZm9yIGEgY2FsbCBvciBzaWdodXAsIGNhdXNpbmcgYSByZS1leGVjDQogICBBZnRl ciBhIHJlLWV4ZWMgZm9sbG93aW5nIGEgY2FsbCwgdGhlcmUgYXJlIHR3bw0KICAgbGlzdGVu IG9uIHBvcnQgOTk5IChuZXRzdGF0IC1hKQ0KICAgSW5jb21pbmcgY2FsbHMgbWF5IG9yIG1h eSBub3Qgd29yay4NCiAgIA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovDQoNCiAgd2hpbGUoMSkgew0KICAgIEZEX1pFUk8oJnNlbGVjdF9s aXN0ZW4pOw0KICAgIEZEX1NFVChzb2NrZmQsICZzZWxlY3RfbGlzdGVuKTsNCiAgICBpZiAo Z2V0ZW52KCJFWEVDIikgIT0gTlVMTCkgew0KICAgICAgICBwcmludGYoIm5ldHN0YXQgLWEg d2lsbCBzaG93IHR3byBsaXN0ZW4gb24gcG9ydCA5OTlcbiIpOw0KICAgIH0NCiAgICBlbHNl IGlmIChjYWxsX3NlZW4gPT0gRkFMU0UpIHsgDQogICAgICAgIHByaW50ZigidGVsbmV0IGxv Y2FsaG9zdCA5OTlcbiIpOw0KICAgIH0NCiAgICBlbHNlIA0KICAgICAgICBwcmludGYoImtp bGwgLUhVUCAlZFxuIiwgcGlkKTsNCiAgICBsY291bnQgPSBzZWxlY3Qoc29ja2ZkICsgMSwg JnNlbGVjdF9saXN0ZW4sIE5VTEwsIE5VTEwsIE5VTEwpOw0KICAgIGlmIChsY291bnQgPT0g MSkgew0KICAgICAgcGVlcl9zaXplID0gc2l6ZW9mKHBlZXIpOw0KICAgICAgbmV3c29ja2Zk ID0gYWNjZXB0KHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmcGVlciwgJnBlZXJfc2l6 ZSk7DQogICAgICBpZiAobmV3c29ja2ZkIDwgMCkgew0KICAgICAgICBwcmludGYoImFjY2Vw dDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAg ICAgICAgcHJpbnRmKCJHb3QgYSBjYWxsXG4iKTsNCiAgICAgICAgY2FsbF9zZWVuID0gVFJV RTsNCiAgICAgICAgb3V0ZmQgPSBmZG9wZW4obmV3c29ja2ZkLCAid2IiKTsNCiAgICAgICAg aWYgKG91dGZkID09IE5VTEwpDQogICAgICAgICAgICBwcmludGYoImZkb3BlbjogJXNcbiIs IHN0cmVycm9yKGVycm5vKSk7DQogICAgICAgIGlmIChmb3JrKCkgPT0gMCkgew0KICAgICAg ICAgIHNpZ25hbChTSUdIVVAsIFNJR19JR04pOw0KICAgICAgICAgIGNsb3NlKHNvY2tmZCk7 ICAgICAvKiBDbG9zZSB0aGUgbGlzdGVuaW5nIHNvY2tldCAqLw0KICAgICAgICAgIGZwcmlu dGYob3V0ZmQsICJxdWl0IHdpdGggRVNDICBDVFJMLV0gYW5kIHF1aXQgdGhlblxuIik7DQog ICAgICAgICAgZnByaW50ZihvdXRmZCwgImtpbGwgLUhVUCAlZFxuIiwgcGlkKTsNCiAgICAg ICAgICBmcHJpbnRmKG91dGZkLCAibmV0c3RhdCAtYSB3aWxsIHNob3cgdHdvIGxpc3RlbiBv biBwb3J0IDk5OVxuIik7DQogICAgICAgICAgZmZsdXNoKG91dGZkKTsNCiAgICAgICAgICAv KiBJbiB0aGlzIGRlbW8gd2Ugc2xlZXAuIEluIHJlYWxpdHkgdGhlIGNoaWxkIGlzIHdvcmtp bmcgKi8NCiAgICAgICAgICBzbGVlcCg2MCk7DQogICAgICAgICAgcHJpbnRmKCJDaGlsZCBl eGl0aW5nXG4iKTsNCiAgICAgICAgICBmY2xvc2Uob3V0ZmQpOyAgICAvKiBDbG9zZSB0aGUg YWNjZXB0ZWQgc29ja2V0ICovDQogICAgICAgICAgZXhpdCgwKTsNCiAgICAgICAgfQ0KICAg ICAgICBlbHNlIHsNCiAgICAgICAgICBmY2xvc2Uob3V0ZmQpOyAgICAvKiBDbG9zZSB0aGUg YWNjZXB0ZWQgc29ja2V0ICovDQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgZWxz ZSBpZiAoc2lnaHVwX3NlZW4gPT0gVFJVRSkgew0KICAgICAgaWYgKGNhbGxfc2VlbiA9PSBU UlVFKSBwdXRlbnYoIkVYRUM9MSIpOw0KICAgICAgY2xvc2Uoc29ja2ZkKTsgICAgICAgIC8q IENsb3NlIHRoZSBsaXN0ZW5pbmcgc29ja2V0ICovDQogICAgICBzaWduYWwoU0lHSFVQLCBT SUdfSUdOKTsNCiAgICAgIHByaW50ZigiU2lnbmFsIHNlZW4uIEV4ZWNpbmdcbiIpOw0KICAg ICAgZXhlY3YoYXJndlswXSwgYXJndik7DQogICAgfQ0KICAgIGVsc2UgcHJpbnRmKCJFcnJv ciAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsNCiAgfQ0KfQ0K --------------5EF47D03C81762295A8FF33B Content-Type: text/plain; charset=us-ascii -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ --------------5EF47D03C81762295A8FF33B--