В Linux системах есть Accept фильтры, которые включаются через setsockopt с флагом TCP_DEFER_ACCEPT. т.е. у них идея такая что accept не вернет сокет пока не придут на него данные или не сработает таймаут. Оч удобная система. Читал что для Windows используют в подобных целях AcceptEx функцию, но вот как именно - хз. MSDN тольком ничего про accept фильтры не упоминает. или мож плохо искал ) Может ктонить видел гденить доку по этой теме или примеры. А то разбираться в огромных проектах с гуглокода, както не очень хочется
Но вообще судя по виду в MS нету такой полезной фишки. А то что они предлагают - откровенно говоря отстой. Потому что чуть другая логика работы.
2slesh а если написать что то вроде этого ? Code: unsigned newaccept(timeout, listen_sock){ set_non_block_io(listen_sock)... // ioctlsocket realaccept_wait_client(listen_sock) ... // accept select_for_connect ... // select restore_block_io(listen_sock)... // ioctlsocket readable_socket = realaccept_wait_client(listen_sock)... // accept set_non_block_io(readable_socket) // ioctlsocket real_recv(readable_socket)... // recv select_for_readable... // select restore_block_io(readable_socket)... // ioctlsocket return readable_socket; }
тоже не подходит, потому что тут главное было в том, чтобы снизить нагрузку на серверную часть. потому тысячи коннектов должно держать. И порты завершения не катят по определенным причинам