Что относительно hardlinking дубликаты файлов вместе? Тем путем пространство только используется однажды, но они все еще существуют во всех путях. Выгода с этим - то, что hardlinked файлы должны быть изменены на месте (они должны только быть изменены, удалив файл и воссоздав его с новым содержанием). Другой подход является к символьной ссылке файлами вместе, хотя у Вас есть та же проблема решения, которое "основной" файл. Это могло быть сделано со следующим сценарием (хотя примечание, что это не обрабатывает имена файлов, содержащие пробелы).
fdupes --quiet --recurse --sameline somedirectory/ | while read SOURCE DESTS; do
for DEST in $DESTS; do
ln -f $SOURCE $DEST
done
done
Это - часть TCP (или UDP, и т.д.) заголовок, в пакете. Таким образом, сервер узнает, потому что клиент говорит его. Это подобно тому, как это узнает IP-адрес клиента (который является частью заголовка IP).
Например, каждый пакет TCP включает заголовок IP (с исходным IP, целевым IP и протоколом [TCP], по крайней мере). Затем существует заголовок TCP (с исходным и целевым портом, плюс больше).
Когда ядро получает пакет SYN (запуск соединения TCP) с удаленным IP 10.11.12.13 (в заголовке IP) и удаленный порт 12 345 (в заголовке TCP), это затем знает удаленный IP и порт. Это передает SYN|ACK обратно. Если это возвращает ACK, listen
назовите возвраты новым сокетом, настройте для того соединения.
Сокет TCP однозначно определяется четырьмя значениями (удаленный IP, локальный IP, удаленный порт, локальный порт). У Вас могут быть многочисленные связи / сокеты, целый по крайней мере один из тех отличается.
Как правило, локальный порт и локальный IP будут тем же для всех соединений с серверным процессом (например, все соединения с sshd будут идти локальные-ip:22). Если одна удаленная машина установит многочисленные связи, то каждый будет использовать различный удаленный порт. Таким образом, все кроме удаленного порта будет тем же, но это прекрасно — только один из этих четырех должен отличаться.
Можно использовать, например, wirehsark для наблюдения пакета, и он маркирует все данные для Вас. Вот выделенный исходный порт (заметьте, что он выделился в декодируемом пакете, а также шестнадцатеричном дампе внизу):
"Запрос подключения (клиентская программа connect()
системный вызов, обычно), вызывает трехстороннее квитирование. Первому пакету трехстороннего квитирования (от клиента к серверу) установили флаг SYN и включает номер порта TCP, который клиентское ядро программы присваивает ему.
Вы видите это в статье о Nmap по сравнению с Естественными пакетами SYN. Пакетное декодирование Nmap SYN имеет фразу "источник 60058> dest.22". "Законный пакет SYN" декодирование имеет фразу "источник 35970> dest.80" в нем. Два пакета SYN говорят удаленному ядру, что пакеты от порта TCP 60058 и порта 35970, соответственно.
getpeername()
должен позволить Вам сделать это на любом открытом сокете. accept()
системный вызов, который серверный код должен использовать, чтобы заставить дескриптор файла сокета связываться назад с клиентом, имеет параметр ("sockaddr" в моих страницах справочника), который содержит IP-адрес возможного клиента и номер порта TCP.
– Bruce Ediger
07.05.2013, 20:23
Соединение определяется кортежем (исходный IP, исходный порт, целевой IP, целевой порт). Ответы идут реверс.
Сокет TCP является потоковым сокетом. Два дескриптора сокета (принадлежавший Вам и Вашей коллеге) надежно соединены. Таким образом, Вы не должны волноваться о порте клиента - просто пишут Ваш дескриптор сокета!
Кроме того, не стесняйтесь к getsockname (2), если Вы действительно хотите знать что (для входа, возможно).
write
(и т.д.). переходит к правильному месту. – derobert 07.05.2013, 20:27