2012-09-05 10 views
9

Czy istnieje różnica międzyPerl wyłączanie gniazdo

shutdown($socket, 0) if $socket; 
shutdown($socket, 2) if $socket; 
close($socket) if $socket; 

i

shutdown($socket, 2) if $socket; 
close($socket) if $socket; 

też jest jakaś różnica między

shutdown($socket, 1) if $socket; 
shutdown($socket, 2) if $socket; 
close($socket) if $socket; 

i

shutdown($socket, 2) if $socket; 
close($socket) if $socket; 

I wreszcie czy w ogóle jest potrzebny close?

Odpowiedz

12

shutdown powoduje z jednej strony połączenia TCP przestać czytać (0) lub pisemnie (1) lub obu (2). Pierwsze dwa fragmenty mają taki sam efekt, jak dwa następne.

shutdown nie zwalnia deskryptora pliku, więc close jest nadal potrzebny.

Różnica między pojedynczym close a jednym poprzedzającym shutdown(fd, 2) polega na tym, że w drugim przypadku protokół TCP nie będzie próbował dostarczyć zaległych danych do zdalnej strony (patrz SO_LINGER).