> This change implements multi-accept, based on the idea that > poll/select can only be efficient, if we succeed in handling > all available events, i.e. accept all pending connections.
I noticed that some of the temporary error conditions will exit the function. You might want to consider using continues in the while form. I'm afraid I won't accept anything that uses goto except in error exit conditions in functions that need to do cleanups due to stylistic prejudices. > Additionally, a portability issue was resolved. '%m' is not > available everywhere. It was replaced with the portable > way of relying on strerror(). I already mentioned this to you, but ircd_snprintf() always supports %m, so this isn't an issue. Just to clarify what I meant earlier, take this snippet of code in your patch: + if (fd > MAXCLIENTS - 1) { + ++ServerStats->is_ref; + send(fd, "ERROR :All connections in use\r\n", 32, 0); + close(fd); + return; + } All connections may be in use, but there may still be connections waiting to be accepted. Our choices are to either skip those pending connections, hoping that an fd will become available the next time through, or we can go clear out all those pending accept()'s during this loop. If the former, then this is fine; if the latter, then the return needs to be changed to a continue. I guess what I'm really asking for is if this *is* what you meant to do here--perhaps a comment to that effect could be added to the returns. Several of the other tests following this one do need to have the return changed to a continue, though, such as the listener->active test or the connection_allowed() test. Other than that, the patch looks good. I have a slight concern about indentation, so you might want to look at that, but it's relatively minor, as I could correct it when I commit. If you could address my other concerns and resubmit the patch, I'd greatly appreciate it :) Thanks, > 2002-05-17 Sascha Schumann <[EMAIL PROTECTED]> > > * ircd/listener.c (accept_listener): In the event of > a readable listener socket, the function loops > until accept(2) returns -1. This ensures that all > connections which are pending at the time are accepted > which increases the server's capacity significantly. > Also turn '%m' into '%s' and use the portable function > strerror(errno). > > - Sascha Experience IRCG > http://schumann.cx/ http://schumann.cx/ircg > > --8323584-452026418-1021646760=:32133 > Content-Type: TEXT/PLAIN; charset=us-ascii; name=multi-accept > Content-Transfer-Encoding: BASE64 > Content-ID: <[EMAIL PROTECTED]> > Content-Description: > Content-Disposition: attachment; filename=multi-accept > > SW5kZXg6IGxpc3RlbmVyLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09 > PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJD > UyBmaWxlOiAvaG9tZS9jb2Rlci1jb20vY3ZzL2lyY3UyLjEwL2lyY2QvbGlz > dGVuZXIuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcuMi4xDQpkaWZm > IC11IC1yMS4xNy4yLjEgbGlzdGVuZXIuYw0KLS0tIGxpc3RlbmVyLmMJMjAw > Mi8wMS8xMSAwMDoyMDozMgkxLjE3LjIuMQ0KKysrIGxpc3RlbmVyLmMJMjAw > Mi8wNS8xNyAxNDozMTowMA0KQEAgLTQ0MiwxNSArNDQyLDMxIEBADQogICAg > ICAqIHBvaW50LCBqdXN0IGFzc3VtZSB0aGF0IGNvbm5lY3Rpb25zIGNhbm5v > dA0KICAgICAgKiBiZSBhY2NlcHRlZCB1bnRpbCBzb21lIG9sZCBpcyBjbG9z > ZWQgZmlyc3QuDQogICAgICAqLw0KKw0KKyAgICAgLyoNCisgICAgICAqIFRo > aXMgcGllY2Ugb2YgY29kZSBpbXBsZW1lbnRzIG11bHRpLWFjY2VwdCwgYmFz > ZWQNCisgICAgICAqIG9uIHRoZSBpZGVhIHRoYXQgcG9sbC9zZWxlY3QgY2Fu > IG9ubHkgYmUgZWZmaWNpZW50LA0KKyAgICAgICogaWYgd2Ugc3VjY2VlZCBp > biBoYW5kbGluZyBhbGwgYXZhaWxhYmxlIGV2ZW50cywNCisgICAgICAqIGku > ZS4gYWNjZXB0IGFsbCBwZW5kaW5nIGNvbm5lY3Rpb25zLg0KKyAgICAgICoN > CisgICAgICAqIGh0dHA6Ly93d3cuaHBsLmhwLmNvbS90ZWNocmVwb3J0cy8y > MDAwL0hQTC0yMDAwLTE3NC5odG1sDQorICAgICAgKi8NCisJDQordHJ5X2Fn > YWluOg0KICAgICBpZiAoLTEgPT0gKGZkID0gYWNjZXB0KGxpc3RlbmVyLT5m > ZCwgKHN0cnVjdCBzb2NrYWRkciopICZhZGRyLA0KIAkJCSAgICZhZGRybGVu > KSkpIHsNCisgICAgICAgIA0KKyAgICAgIC8qIFRoZXJlIGlzIG5vIG90aGVy > IGNvbm5lY3Rpb24gcGVuZGluZyAqLw0KKyAgICAgIGlmIChlcnJubyA9PSBF > QUdBSU4pDQorICAgICAgICByZXR1cm47DQorDQogICAgICAgLyogTG90c2Eg > YWRtaW5zIHNlZW0gdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIG5vdCBnaXZpbmcg > ZW5vdWdoIGZpbGUNCiAgICAgICAgKiBkZXNjcmlwdG9ycyB0byB0aGVpciBz > ZXJ2ZXIgc28gd2UnbGwgYWRkIGEgZ2VuZXJpYyB3YXJuaW5nIG1lY2hhbmlz > bQ0KICAgICAgICAqIGhlcmUuICBJZiBpdCB0dXJucyBvdXQgdG9vIG1hbnkg > bWVzc2FnZXMgYXJlIGdlbmVyYXRlZCBmb3INCiAgICAgICAgKiBtZWFuaW5n > bGVzcyByZWFzb25zIHdlIGNhbiBmaWx0ZXIgdGhlbSBiYWNrLg0KICAgICAg > ICAqLw0KICAgICAgIHNlbmR0b19vcG1hc2tfYnV0b25lKDAsIFNOT19UQ1BD > T01NT04sDQotCQkJICAgIlVuYWJsZSB0byBhY2NlcHQgY29ubmVjdGlvbjog > JW0iKTsNCisJCQkgICAiVW5hYmxlIHRvIGFjY2VwdCBjb25uZWN0aW9uOiAl > cyIsIHN0cmVycm9yKGVycm5vKSk7DQogICAgICAgcmV0dXJuOw0KICAgICB9 > DQogICAgIC8qDQpAQCAtNDg1LDUgKzUwMSw2IEBADQogLyogICAgICBuZXh0 > cGluZyA9IEN1cnJlbnRUaW1lOyAqLw0KIA0KICAgICBhZGRfY29ubmVjdGlv > bihsaXN0ZW5lciwgZmQpOw0KKyAgICBnb3RvIHRyeV9hZ2FpbjsNCiAgIH0N > CiB9DQo= > --8323584-452026418-1021646760=:32133 > Content-Type: TEXT/PLAIN; charset=us-ascii; name=multi-accept-no-goto > Content-Transfer-Encoding: BASE64 > Content-ID: <[EMAIL PROTECTED]> > Content-Description: > Content-Disposition: attachment; filename=multi-accept-no-goto > > SW5kZXg6IGxpc3RlbmVyLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09 > PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJD > UyBmaWxlOiAvaG9tZS9jb2Rlci1jb20vY3ZzL2lyY3UyLjEwL2lyY2QvbGlz > dGVuZXIuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcuMi4xDQpkaWZm > IC11IC1yMS4xNy4yLjEgbGlzdGVuZXIuYw0KLS0tIGxpc3RlbmVyLmMJMjAw > Mi8wMS8xMSAwMDoyMDozMgkxLjE3LjIuMQ0KKysrIGxpc3RlbmVyLmMJMjAw > Mi8wNS8xNyAxNDozNDoxNg0KQEAgLTQ0Miw0OCArNDQyLDY1IEBADQogICAg > ICAqIHBvaW50LCBqdXN0IGFzc3VtZSB0aGF0IGNvbm5lY3Rpb25zIGNhbm5v > dA0KICAgICAgKiBiZSBhY2NlcHRlZCB1bnRpbCBzb21lIG9sZCBpcyBjbG9z > ZWQgZmlyc3QuDQogICAgICAqLw0KLSAgICBpZiAoLTEgPT0gKGZkID0gYWNj > ZXB0KGxpc3RlbmVyLT5mZCwgKHN0cnVjdCBzb2NrYWRkciopICZhZGRyLA0K > LQkJCSAgICZhZGRybGVuKSkpIHsNCi0gICAgICAvKiBMb3RzYSBhZG1pbnMg > c2VlbSB0byBoYXZlIHByb2JsZW1zIHdpdGggbm90IGdpdmluZyBlbm91Z2gg > ZmlsZQ0KLSAgICAgICAqIGRlc2NyaXB0b3JzIHRvIHRoZWlyIHNlcnZlciBz > byB3ZSdsbCBhZGQgYSBnZW5lcmljIHdhcm5pbmcgbWVjaGFuaXNtDQotICAg > ICAgICogaGVyZS4gIElmIGl0IHR1cm5zIG91dCB0b28gbWFueSBtZXNzYWdl > cyBhcmUgZ2VuZXJhdGVkIGZvcg0KLSAgICAgICAqIG1lYW5pbmdsZXNzIHJl > YXNvbnMgd2UgY2FuIGZpbHRlciB0aGVtIGJhY2suDQorDQorICAgICAvKg0K > KyAgICAgICogVGhpcyBwaWVjZSBvZiBjb2RlIGltcGxlbWVudHMgbXVsdGkt > YWNjZXB0LCBiYXNlZA0KKyAgICAgICogb24gdGhlIGlkZWEgdGhhdCBwb2xs > L3NlbGVjdCBjYW4gb25seSBiZSBlZmZpY2llbnQsDQorICAgICAgKiBpZiB3 > ZSBzdWNjZWVkIGluIGhhbmRsaW5nIGFsbCBhdmFpbGFibGUgZXZlbnRzLA0K > KyAgICAgICogaS5lLiBhY2NlcHQgYWxsIHBlbmRpbmcgY29ubmVjdGlvbnMu > DQorICAgICAgKg0KKyAgICAgICogaHR0cDovL3d3dy5ocGwuaHAuY29tL3Rl > Y2hyZXBvcnRzLzIwMDAvSFBMLTIwMDAtMTc0Lmh0bWwNCisgICAgICAqLw0K > Kw0KKyAgICB3aGlsZSAoMSkgew0KKyAgICAgIGlmICgtMSA9PSAoZmQgPSBh > Y2NlcHQobGlzdGVuZXItPmZkLCAoc3RydWN0IHNvY2thZGRyKikgJmFkZHIs > DQorICAgICAgICAgICAgICAmYWRkcmxlbikpKSB7DQorDQorICAgICAgICAv > KiBUaGVyZSBpcyBubyBvdGhlciBjb25uZWN0aW9uIHBlbmRpbmcgKi8NCisg > ICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pDQorICAgICAgICAgIHJldHVy > bjsNCisNCisgICAgICAgIC8qIExvdHNhIGFkbWlucyBzZWVtIHRvIGhhdmUg > cHJvYmxlbXMgd2l0aCBub3QgZ2l2aW5nIGVub3VnaCBmaWxlDQorICAgICAg > ICAgKiBkZXNjcmlwdG9ycyB0byB0aGVpciBzZXJ2ZXIgc28gd2UnbGwgYWRk > IGEgZ2VuZXJpYyB3YXJuaW5nIG1lY2hhbmlzbQ0KKyAgICAgICAgICogaGVy > ZS4gIElmIGl0IHR1cm5zIG91dCB0b28gbWFueSBtZXNzYWdlcyBhcmUgZ2Vu > ZXJhdGVkIGZvcg0KKyAgICAgICAgICogbWVhbmluZ2xlc3MgcmVhc29ucyB3 > ZSBjYW4gZmlsdGVyIHRoZW0gYmFjay4NCisgICAgICAgICAqLw0KKyAgICAg > ICAgc2VuZHRvX29wbWFza19idXRvbmUoMCwgU05PX1RDUENPTU1PTiwNCisg > ICAgICAgICAgICAiVW5hYmxlIHRvIGFjY2VwdCBjb25uZWN0aW9uOiAlcyIs > IHN0cmVycm9yKGVycm5vKSk7DQorICAgICAgICByZXR1cm47DQorICAgICAg > fQ0KKyAgICAgIC8qDQorICAgICAgICogY2hlY2sgZm9yIGNvbm5lY3Rpb24g > bGltaXQNCiAgICAgICAgKi8NCi0gICAgICBzZW5kdG9fb3BtYXNrX2J1dG9u > ZSgwLCBTTk9fVENQQ09NTU9OLA0KLQkJCSAgICJVbmFibGUgdG8gYWNjZXB0 > IGNvbm5lY3Rpb246ICVtIik7DQotICAgICAgcmV0dXJuOw0KLSAgICB9DQot > ICAgIC8qDQotICAgICAqIGNoZWNrIGZvciBjb25uZWN0aW9uIGxpbWl0DQot > ICAgICAqLw0KLSAgICBpZiAoZmQgPiBNQVhDTElFTlRTIC0gMSkgew0KLSAg > ICAgICsrU2VydmVyU3RhdHMtPmlzX3JlZjsNCi0gICAgICBzZW5kKGZkLCAi > RVJST1IgOkFsbCBjb25uZWN0aW9ucyBpbiB1c2VcclxuIiwgMzIsIDApOw0K > LSAgICAgIGNsb3NlKGZkKTsNCi0gICAgICByZXR1cm47DQotICAgIH0NCi0g > ICAgLyoNCi0gICAgICogY2hlY2sgdG8gc2VlIGlmIGxpc3RlbmVyIGlzIHNo > dXR0aW5nIGRvd24NCi0gICAgICovDQotICAgIGlmICghbGlzdGVuZXItPmFj > dGl2ZSkgew0KLSAgICAgICsrU2VydmVyU3RhdHMtPmlzX3JlZjsNCi0gICAg > ICBzZW5kKGZkLCAiRVJST1IgOlVzZSBhbm90aGVyIHBvcnRcclxuIiwgMjUs > IDApOw0KLSAgICAgIGNsb3NlKGZkKTsNCi0gICAgICByZXR1cm47DQotICAg > IH0NCi0gICAgLyoNCi0gICAgICogY2hlY2sgdG8gc2VlIGlmIGNvbm5lY3Rp > b24gaXMgYWxsb3dlZCBmb3IgdGhpcyBhZGRyZXNzIG1hc2sNCi0gICAgICov > DQotICAgIGlmICghY29ubmVjdGlvbl9hbGxvd2VkKChjb25zdCBjaGFyKikg > JmFkZHIsDQotCQkJICAgIChjb25zdCBjaGFyKikgJmxpc3RlbmVyLT5tYXNr > KSkgew0KLSAgICAgICsrU2VydmVyU3RhdHMtPmlzX3JlZjsNCi0gICAgICBz > ZW5kKGZkLCAiRVJST1IgOlVzZSBhbm90aGVyIHBvcnRcclxuIiwgMjUsIDAp > Ow0KLSAgICAgIGNsb3NlKGZkKTsNCi0gICAgICByZXR1cm47DQotICAgIH0N > Ci0gICAgKytTZXJ2ZXJTdGF0cy0+aXNfYWM7DQotLyogICAgICBuZXh0cGlu > ZyA9IEN1cnJlbnRUaW1lOyAqLw0KKyAgICAgIGlmIChmZCA+IE1BWENMSUVO > VFMgLSAxKSB7DQorICAgICAgICArK1NlcnZlclN0YXRzLT5pc19yZWY7DQor > ICAgICAgICBzZW5kKGZkLCAiRVJST1IgOkFsbCBjb25uZWN0aW9ucyBpbiB1 > c2VcclxuIiwgMzIsIDApOw0KKyAgICAgICAgY2xvc2UoZmQpOw0KKyAgICAg > ICAgcmV0dXJuOw0KKyAgICAgIH0NCisgICAgICAvKg0KKyAgICAgICAqIGNo > ZWNrIHRvIHNlZSBpZiBsaXN0ZW5lciBpcyBzaHV0dGluZyBkb3duDQorICAg > ICAgICovDQorICAgICAgaWYgKCFsaXN0ZW5lci0+YWN0aXZlKSB7DQorICAg > ICAgICArK1NlcnZlclN0YXRzLT5pc19yZWY7DQorICAgICAgICBzZW5kKGZk > LCAiRVJST1IgOlVzZSBhbm90aGVyIHBvcnRcclxuIiwgMjUsIDApOw0KKyAg > ICAgICAgY2xvc2UoZmQpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0N > CisgICAgICAvKg0KKyAgICAgICAqIGNoZWNrIHRvIHNlZSBpZiBjb25uZWN0 > aW9uIGlzIGFsbG93ZWQgZm9yIHRoaXMgYWRkcmVzcyBtYXNrDQorICAgICAg > ICovDQorICAgICAgaWYgKCFjb25uZWN0aW9uX2FsbG93ZWQoKGNvbnN0IGNo > YXIqKSAmYWRkciwNCisgICAgICAgICAgICAoY29uc3QgY2hhciopICZsaXN0 > ZW5lci0+bWFzaykpIHsNCisgICAgICAgICsrU2VydmVyU3RhdHMtPmlzX3Jl > ZjsNCisgICAgICAgIHNlbmQoZmQsICJFUlJPUiA6VXNlIGFub3RoZXIgcG9y > dFxyXG4iLCAyNSwgMCk7DQorICAgICAgICBjbG9zZShmZCk7DQorICAgICAg > ICByZXR1cm47DQorICAgICAgfQ0KKyAgICAgICsrU2VydmVyU3RhdHMtPmlz > X2FjOw0KKyAgICAgIC8qIG5leHRwaW5nID0gQ3VycmVudFRpbWU7ICovDQog > DQotICAgIGFkZF9jb25uZWN0aW9uKGxpc3RlbmVyLCBmZCk7DQorICAgICAg > YWRkX2Nvbm5lY3Rpb24obGlzdGVuZXIsIGZkKTsNCisgICAgfQ0KICAgfQ0K > IH0NCg== > --8323584-452026418-1021646760=:32133-- -- Kevin L. Mitchell <[EMAIL PROTECTED]>