accept фильтры в Windows

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 27 Oct 2010.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    В Linux системах есть Accept фильтры, которые включаются через setsockopt с флагом TCP_DEFER_ACCEPT. т.е. у них идея такая что accept не вернет сокет пока не придут на него данные или не сработает таймаут. Оч удобная система. Читал что для Windows используют в подобных целях AcceptEx функцию, но вот как именно - хз.
    MSDN тольком ничего про accept фильтры не упоминает. или мож плохо искал )
    Может ктонить видел гденить доку по этой теме или примеры. А то разбираться в огромных проектах с гуглокода, както не очень хочется
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Но вообще судя по виду в MS нету такой полезной фишки. А то что они предлагают - откровенно говоря отстой. Потому что чуть другая логика работы.
     
  3. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    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;
    }
    
     
    #3 greki_hoy, 27 Oct 2010
    Last edited: 27 Oct 2010
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    тоже не подходит, потому что тут главное было в том, чтобы снизить нагрузку на серверную часть. потому тысячи коннектов должно держать. И порты завершения не катят по определенным причинам