2012-09-05 13 views
9

no ¿Hay una diferencia entrePerl apagado una toma de

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

y

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

también hay una diferencia entre

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

y

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

Y finalmente es el close necesario en absoluto?

Respuesta

12

shutdown hace que un lado de la conexión TCP para detener la lectura (0), o escribiendo (1), o ambos (2). Entonces, los primeros dos fragmentos tienen el mismo efecto, al igual que los siguientes dos.

shutdown no libera el descriptor de archivo, por lo que close sigue siendo necesario.

La diferencia entre solo close y uno precedido por shutdown(fd, 2) es que en el segundo caso TCP no intentará entregar datos pendientes para el lado remoto (ver SO_LINGER).

Cuestiones relacionadas