Я выполняю поле Linux, работающее 2.6.9-55. ELsmp, x86_64.
Я пытаюсь установить окно приема TCP при помощи setsockopt () функция с помощью C. Я пробую следующее:
rwnd = 1024;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&rwnd, sizeof(rwnd));
Сегмент кода выше находится в клиентской программе, которая получает данные из сервера. Когда я начинаю программу, чтобы получить и наблюдать вывод tcpdump, я наблюдаю согласование окна как так:
11:34:40.257755 IP clientReceiver.42464 > serverSender.8991:
S 1742042788:1742042788(0) win 5840
Мы видим, что клиентская программа на самом деле согласовывает окно, отличающееся от того, что я установил в клиентской программе. Однако от того, как я могу интерпретировать текст Steven ("Проиллюстрированный TCP/IP, Объем 1") Раздел 20.4, я верю Вам эффект, к чему он обращается во втором блоке цитирования в Разделе 20,4 использования setsockopt () вызов, который я использую (см. выше).
Я хотел бы понять, где я пошел не так, как надо.
Возможно, моя интерпретация того, что говорит Stevens, является неправильной. В этом случае Вы могли указать на меня на корректный способ установить получить размер буфера? Как доказательство моего беспорядка, я отсылаю страницу справочника сокетов TCP Linux по http://linux.die.net/man/7/tcp (см. комментарий к SO_RCFBUF).
Что я пропускаю в этой истории? Как я управляю получить размером буфера (и имею его шоу в выводе tcpdump)? Обратите внимание на то, что я ссылаюсь на здесь установку опции SO_RCFBUF сокета - я понимаю, что это - то, что обнаруживается в согласовании окна в SYN.
Любой вход ценится.
Вам также необходимо использовать TCP_WINDOW_CLAMP
rcvbuf = 2048;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)& rcvbuf, sizeof(rcvbuf));
clamp = 1024;
setsockopt(sock, SOL_SOCKET, TCP_WINDOW_CLAMP, (char *)& clamp, sizeof(clamp));
Обратите внимание, что rcvbuf в два раза больше зажима, может быть и больше. Вы можете дать ему автонастройку, оконный зажим все равно будет работать. Это не переносно.
Размер приемного буфера можно уменьшить только перед подключением разъема - его можно увеличить в любой момент. В каком порядке вы вызываете sockopt() относительно connect()?
.Существует только одно место в рамку .NET, где у вас есть , чтобы знать IL, классы в пространстве имен System.Reflection.Emit. Он позволяет создавать код на лету, что может быть полезно в выбранных случаях.
Лучший способ получить воздействие IL - это инструмент Ildasm.exe, Reflector тоже может работать. Очень удобный способ его выполнения - добавление в меню «Сервис». Сервис + Внешние инструменты, Добавить.
Теперь можно записать некоторые управляемые файлы Вам будет довольно легко, если вы уже были подвержены машинному коду. Просто имейте в виду, что IL нетипизирован, тот же код операции используется для любого типа значения.
Следующий шаг - посмотреть, как IL преобразуется в машинный код. Начните отладку, щелкните код правой кнопкой мыши и выберите «Перейти к разборке». Будьте осторожны, что вы не будете смотреть на реальный машинный код, если не запустите сборку Release и не включите оптимизацию JIT. Сервис + Параметры, Отладка, кнопка «Подавить оптимизацию JIT при загрузке модуля».
-121--26694-Случайные ли зависимости в GAC? Мы столкнулись с подобной проблемой на нашем сервере сборки, когда чей-то сценарий после сборки GAC имел несколько сборок. Наши установщики больше не будут упаковывать эти предметы в установку, поэтому приложение не будет запущено при последующей установке в тесте.
-121--4518433-Для TCP необходимо передать значение rwnd во время recv.
recv (носок, буф, rwnd, 0);
Это должно принимать 1024 байт.