Я переглядав посібник Apache httpd в Інтернеті і натрапив на директиву, яка дозволяє це зробити. Знайдено опис на сторінці man для tcp
:
TCP_DEFER_ACCEPT (since Linux 2.4)
Allow a listener to be awakened only when data arrives on the
socket. Takes an integer value (seconds), this can bound the
maximum number of attempts TCP will make to complete the
connection. This option should not be used in code intended
to be portable.
Потім я знайшов цю статтю, але мені все ще незрозуміло, для яких навантажень це було б корисно. Я припускаю, що якщо httpd
є опція спеціально для цього, вона повинна мати певне значення для веб-серверів. Я також припускаю, що це варіант, а не лише те, як httpd
відбувається мережне підключення, що є випадки використання, коли ви цього хочете, та інші, де ви цього не робите.
Навіть прочитавши статтю, мені незрозуміло, якою перевагою буде чекати завершення тривимірного рукостискання. Здавалося б, вигідно переконатися, що не потрібно буде замінювати відповідний httpd
екземпляр, роблячи це, поки рукостискання все ще триває, замість того, щоб потенційно викликати цю затримку після створення з'єднання.
Щодо статті, мені також здається, що незалежно від TCP_DEFER_ACCEPT
статусу сокета, вам все одно знадобляться чотири пакети (рукостискання, потім дані у кожному випадку). Я не знаю, як вони зменшують кількість до трьох, і як це забезпечує значне підвищення.
Отже, моє запитання в основному: це лише старий застарілий варіант, чи існує фактичний випадок використання для цього варіанту?