Sieci komputerowe :P

0

Mam dwa pyrtanka związane z programowaniem sieciowym :)

  1. Jakie problemy mogą wystąpić gdy program nie zamyka poprawnie gniazd po zakończonej komunikacji?
  2. W czasie nawiązywania połączenia wiązane jest gniazdo z adresem. Czy istnieje możliwość zmiany tego powiązania? Kiedy może zaitnieć taka potrzeba?
0

Ad1. żadne. po prostu port na którym było nawiązane połączenie będzie przez pewien czas zajęty (do czasu timeout'u). afaik po zamknięciu programu gniazdo i związane z nim zasoby i tak zostaną zwolnione.
co najwyżej jeśli szybko zajmujesz nowe porty, a starych nie zwalniasz, to mogą się one na jakiś czas skończyć.

Ad2. wątpię. tcp to protokół połączeniowy, dlatego gniazda są ze sobą jednoznacznie powiązane (są połączone) i nie da się zmienić adresu docelowego bez niszczenia całego gniazda.

[dopisane]
widzisz, znam to od strony praktyczno/programistycznej i wiem, że nigdy nie było potrzebne ani też nie było funkcji api które pozwalają na coś takiego.

0

powiem tak jakby sie nie dalo to bym nie pytal ale dzikei za checi

A jednak do czegos to jest potrzebne a przede wszystkim mozliwe
Rozważ sytuację, gdy serwer "pada" z powodu jakiegoś krytycznego
błędu i nie zamyka gniazda. OS oczywiście zamknie to gniazdo, ale po dość
długim czasie oczekiwania (OS nie zamyka gniazd od razu. Odczekuje jeszcze
pewną stałą ilość czasu przed zamknięciem po to, żeby jakieś ostatnie pakiety
walające się po sieci mogły jeszcze zostać odebrane). I o ten czas chodzi.
Co, jeżeli to jest krytyczna usługa? W pewnych zastosowaniach nie można
sobie pozwolić na kilkanaście sekund przerwy. I w takim wypadku można
jeszcze raz odpalić serwer i "ręcznie" nowy proces przywiązać do starego,
istniejącego jeszcze gniazda.

a cłuży do tego procedura bind
bind(gniazdo, adres_lokalny,dl_adresu)

w tej tematyce polecam Comer "Sieci TCP\IP"

PZ>>

P.S. chyba sie jednak nie znasz na tym az tak jak myslisz :P

0

nie chce się kłócić, ale jeśli serwer pada, to raczej nie podniesie się w kilkanaście sekund, więc i tak nastąpi timeout (zwłaszcza, że admini mają słaby refleks).
bind nie służy do przywrócenia połączenia, tylko do przywiązania gniazda do adresu i portu. możesz mi wytłumaczyć, jak za pomocą bind chcesz chcesz zmienić to powiązanie nie niszcząc całego gniazda? bo jeśli użyjesz bind na gniazdku, które już było przypisane do portu, to dostaniesz błąd (WSAEINVAL).

poza tym daruj sobie takie przytyki, bo orłem w tej dziedzinie nie jestem, ale napisałem kilka programów sieciowych na poziomie api i raczej wiem jak to wszystko działa.

0

Witam

Na poczatku sorki to nie miala byc zlosliwosc :P

Wiesz ja tez pare programikow napisalem ale nigdy z takiej opcji nie korzystalem. Wystawilem temat na formu bo mialem takie dwa zadania na liscie z Sieci komputerowych (UWr.) i nie mialem zielonego pojecia. Odpowiedz do pytania drugie umiescilem na podstawie informcji zebranych przez moich kumpli w czasie cwiczen: http://www.ii.uni.wroc.pl/~lipinski/ Co do binda to ja tylko napomknalem ze mozna go wykozystac do powiazania gniazda z adresem (moze to juz byc istniejeace gniazdo)

Pozdrawiam serdecznie

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.