UNIX: разработка сетевых приложений - Страница 386
solaris % sock -s -u 8888 & запускаем первый[1] 24051solaris % sock -s -u 8888can't bind local address: Address already in usesolaris % sock -s -u -A 8888 & снова пробуем запустить второй с -A: работаетsolaris % netstat -na | grep 8888 мы видим дублированное связывание*.8888 Idle* 8888 IdleВ этой системе задавать параметр
SO_REUSEADDRSO_REUSEPORTSO_REUSEADDRmacosx % sock -u -s -A 7777 &[1] 17610macosx % sock -u -s -A 7777can't bind local address: Address already in useТогда пробуем использовать параметр
SO_REUSEPORTmacosx % sock -u -s 8888 &[1] 17612macosx % sock -u -s -T 8888can't bind local address: Address already in useНаконец, задаем параметр
SO_REUSEPORTmacosx % sock -u -s -Т 9999 &[1] 17614macosx % sock -u -s -T 9999 &[2] 17615macosx % netstat -na | grep 9999udp4 0 0 *.9999 *.*udp4 0 0 *.9999 *.*7.7. Этот параметр (
-dpingSO_DEBUGSO_DEBUG7.8. Временная диаграмма приведена на рис. Д.4.

Рис. Д.4. Взаимодействие алгоритма Нагла с задержанными сегментами ACK
7.9. Установка параметра сокета
TCP_NODELAYwrite
Рис Д.5. Предотвращение алгоритма Нагла путем установки параметра TCP_NODELAY
7.10. Как показано на рис. Д.6, преимущество данного решения состоит в уменьшении числа пакетов.

Рис. Д.6. Использование функции writev вместо параметра сокета TCP_NODELAY
7.11. В разделе 4.2.3.2 говорится: «задержка ДОЛЖНА быть меньше 0,5 с, а в потоке полноразмерных сегментов СЛЕДУЕТ использовать сегмент ACK по крайней мере для каждого второго сегмента». Беркли-реализации задерживают сегмент ACK не более, чем на 200 мс [128, с. 821].
7.12. Родительский процесс сервера в листинге 5.1 большую часть времени блокирован в вызове функции
acceptreadreadlineSO_KEEPALIVEETIMEDOUT7.13. Клиент, приведенный в листинге 5.4, большую часть времени блокирован вызовом функции
fgetsETIMEDOUTfgetsselect7.14. Этот клиент большую часть времени блокирован вызовом функции
selectETIMEDOUT7.15. Происходит обмен только двумя сегментами, а не четырьмя. Вероятность того, что таймеры двух систем будут строго синхронизированы, очень мала, следовательно, на одном конце соединения таймер проверки работоспособности сработает немного раньше, чем на другом. Первый из сработавших таймеров посылает проверочное сообщение, заставляя другой конец послать в ответ сегмент ACK. Но получение проверочного сообщения приводит к тому, что таймеру проверки работоспособности с более медленными часами будет присвоено новое значение — он сдвинется на 2 ч вперед.
7.16 Изначально в API сокетов не было функции
listensocketSO_ACCEPTCONNlistenГлава 8
8.1. Да. Функция
readrecvfromrecvfrom