먼저 Stream_Socket_Shutdown 함수의 기본 구문을 살펴 보겠습니다.
bool stream_socket_shutdown ( resource $stream , int $how )
$ stream : stream_socket_client 또는 stream_socket_server 와 같은 함수를 통해 열린 소켓 리소스입니다.
$ 방법 : 작업을 닫는 방법입니다. 다음 상수 중 하나를 사용할 수 있습니다.
stream_shut_rdwr : 동시에 읽기 및 쓰기 작업을 닫습니다.
stream_shut_rd : 읽기 작업을 닫습니다.
stream_shut_wr : 쓰기 작업을 닫습니다.
TCP 프로토콜은 연결 지향적이므로 통신 전에 연결을 설정해야하며 통신이 완료된 후에는 연결을 우아하게 닫아야합니다. TCP 연결에서 Stream_Socket_Shutdown 기능의 역할은 특히 중요합니다. 특히 데이터 전송을 수행 한 후에는 리소스 누출을 피하기 위해 연결이 올바르게 닫혀 있는지 확인해야합니다.
stream_socket_client 또는 stream_socket_server를 사용하여 연결을 설정하십시오.
데이터 전송이 완료된 후 Stream_Socket_Shutdown ($ stream, Stream_Shut_wr)을 사용하여 쓰기 작업을 닫습니다 (원격 호스트에 더 이상 데이터를 보내지 않도록 알려줍니다).
그런 다음 원격 호스트가 데이터 전송을 완료하고 연결을 닫을 때 까지 기다리십시오.
일반적인 TCP 연결 종료 예 :
$stream = stream_socket_client("tcp://m66.net:80", $errno, $errstr);
if (!$stream) {
echo "Error: $errno - $errstr\n";
} else {
fwrite($stream, "GET / HTTP/1.1\r\nHost: m66.net\r\nConnection: close\r\n\r\n");
// 쓰기 작업을 닫습니다,데이터가 더 이상 전송되지 않음을 나타냅니다
stream_socket_shutdown($stream, STREAM_SHUT_WR);
// 응답을 읽으십시오
while ($response = fgets($stream)) {
echo $response;
}
// 읽기 작업을 닫으십시오,연결을 닫으십시오
stream_socket_shutdown($stream, STREAM_SHUT_RD);
fclose($stream);
}
TCP 프로토콜에서 Stream_Socket_Shutdown을 사용하면 읽기 및 작성 작업을 별도로 끄고 연결을 닫을 수 있습니다. 이는 연결을 우아하게 닫아야하는 시나리오에 매우 유용합니다.
Stream_Shut_wr을 사용하는 경우 원격 호스트는 일반적으로 "연결 종료"신호를 받고 연결을 닫고 리소스를 확정합니다.
TCP 프로토콜과 달리 UDP는 연결이없는 프로토콜이므로 UDP 프로토콜에서 지속적으로 연결할 필요가 없으며 TCP만큼 우아하게 연결을 닫을 필요가 없습니다. UDP에는 데이터 흐름 또는 연결 종료의 제어가 포함되지 않기 때문에 Stream_Socket_Shutdown은 UDP 프로토콜에서 역할이 제한되어 있습니다.
Stream_Socket_Client 또는 Stream_Socket_Server를 사용하여 UDP 소켓을 만듭니다.
패킷을 전송 한 후 UDP 커뮤니케이션에는 "연결"이라는 개념이 없기 때문에 읽기 및 쓰기 작업을 닫기 위해 Stream_Socket_Shutdown을 명시 적으로 호출 할 필요가 없습니다.
UDP 데이터 전송의 전형적인 예 :
$stream = stream_socket_client("udp://m66.net:12345", $errno, $errstr);
if (!$stream) {
echo "Error: $errno - $errstr\n";
} else {
fwrite($stream, "Hello, UDP server!");
fclose($stream);
}
UDP 프로토콜에서는 stream_socket_shutdown 함수를 일반적으로 호출 할 필요가 없습니다. UDP 프로토콜 자체에는 명확한 연결 개념이 없기 때문에 호출 되더라도 동작은 TCP와 같이 연결에 영향을 미치지 않습니다.
따라서 UDP 애플리케이션 시나리오에서는 stream_socket_shutdown 함수를 사용한다고해서 데이터 전송의 동작이 크게 변경되지 않습니다.
TCP 및 UDP 프로토콜에서 stream_socket_shutdown 함수의 적용에는 명백한 차이가 있습니다. TCP 프로토콜의 경우 연결을 우아하게 닫고 데이터 전송이 완료되도록하고 리소스를 해방시킵니다. UDP 프로토콜에서는 연결이없는 특성으로 인해 Stream_Socket_Shutdown 의 역할은 덜 중요하며 일반적으로 사용할 필요가 없습니다.
개발자가 Stream_Socket_Shutdown을 사용하면 사용 된 실제 프로토콜 유형에 따라 적절한 종료 방법을 선택해야합니다. TCP 프로토콜에서 Stream_shut_wr 및 Stream_Shut_rd 의 합리적인 사용은 연결의 올바른 종료 및 적시에 리소스의 해제를 보장 할 수 있습니다. UDP 프로토콜에서는 일반적 으로이 기능이 필요하지 않습니다.