Streams stream_socket_client

(PHP 5, PHP 7, PHP 8)

stream_socket_client — 인터넷 또는 Unix 도메인 소켓 연결 열기


설명

stream_socket_client(
    string $address,
    int &$error_code = null,
    string &$error_message = null,
    ?float $timeout = null,
    int $flags = STREAM_CLIENT_CONNECT,
    ?resource $context = null
): resource|false
                

address로 지정된 대상에 대한 스트림 또는 데이터그램 연결을 시작합니다. 생성된 소켓 유형은 표준 URL 형식인 transport://target을 사용하여 지정된 전송에 의해 결정됩니다. TCP 및 UDP와 같은 인터넷 도메인 소켓(AF_INET)의 경우 address 매개변수의 target 부분은 호스트 이름 또는 IP 주소 다음에 콜론 및 포트 번호로 구성되어야 합니다. Unix 도메인 소켓의 경우 target 부분은 파일 시스템의 소켓 파일을 가리켜야 합니다.

메모: 스트림은 기본적으로 차단 모드에서 열립니다. stream_set_blocking()을 사용하여 비차단 모드로 전환할 수 있습니다.


매개변수

address
연결할 소켓의 주소입니다.
error_code
연결에 실패하면 시스템 수준 오류 번호로 설정됩니다.
error_message
연결이 실패하면 시스템 수준 오류 메시지로 설정됩니다.
timeout
connect() 시스템 호출이 시간 초과될 때까지의 시간(초)입니다. 기본적으로 default_socket_timeout이 사용됩니다.

메모: 이 매개변수는 비동기식 연결을 시도하지 않는 경우에만 적용됩니다.

메모: 소켓을 통한 데이터 읽기/쓰기에 대한 제한 시간을 설정하려면 소켓을 연결하는 동안에만 timeout이 적용되므로 stream_set_timeout()을 사용하십시오.

flags
연결 플래그의 모든 조합으로 설정할 수 있는 비트 마스크 필드입니다. 현재 연결 플래그 선택은 STREAM_CLIENT_CONNECT(기본값), STREAM_CLIENT_ASYNC_CONNECTSTREAM_CLIENT_PERSISTENT로 제한됩니다.
context
stream_context_create()로 생성된 유효한 컨텍스트 리소스.

반환 값

성공하면 다른 파일 함수(예: fgets(), fgetss(), fwrite(), fclose(), feof())와 함께 사용할 수 있는 스트림 리소스가 반환되고 실패하면 false입니다.


오류/예외

실패 시 error_codeerror_message 인수는 시스템 수준 connect() 호출에서 발생한 실제 시스템 수준 오류로 채워집니다. error_code에 반환된 값이 0이고 함수가 false를 반환하면 connect() 호출 전에 오류가 발생했음을 나타냅니다. 소켓 초기화 문제 때문일 가능성이 큽니다. error_codeerror_message 인수는 항상 참조로 전달됩니다.


변경 로그

버전 설명
8.0.0 timeoutcontext는 이제 nullable입니다.

Examples

예제 #1 stream_socket_client() 예제

                  
<?php
$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    fwrite($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
    while (!feof($fp)) {
        echo fgets($fp, 1024);
    }
    fclose($fp);
}
?>
                  
                

예제 #2 UDP 연결 사용

localhost의 UDP 서비스 "daytime"(포트 13)에서 날짜와 시간을 검색합니다.

                  
<?php
$fp = stream_socket_client("udp://127.0.0.1:13", $errno, $errstr);
if (!$fp) {
    echo "ERROR: $errno - $errstr<br />\n";
} else {
    fwrite($fp, "\n");
    echo fread($fp, 26);
    fclose($fp);
}
?>
                  
                

메모

경고 UDP 소켓은 원격 호스트에 연결할 수 없는 경우에도 오류 없이 열린 것처럼 보일 수 있습니다. 오류는 소켓에 데이터를 읽거나 쓸 때만 분명해집니다. 그 이유는 UDP가 "connectionless" 프로토콜이기 때문입니다. 즉, 운영 체제는 실제로 데이터를 보내거나 받아야 할 때까지 소켓에 대한 링크를 설정하려고 시도하지 않습니다.

참고: 숫자 IPv6 주소(예: fe80::1)를 지정할 때 IP를 대괄호로 묶어야 합니다(예: tcp://[fe80::1]:80).

참고: 환경에 따라 Unix 도메인 또는 선택적 연결 제한 시간을 사용하지 못할 수 있습니다. 사용 가능한 전송 목록은 stream_get_transports()를 사용하여 검색할 수 있습니다. 기본 제공 전송 목록은 지원되는 소켓 전송 목록을 참조하세요.


기타

  • stream_socket_server() - 인터넷 또는 Unix 도메인 서버 소켓 만들기
  • stream_set_blocking() - 스트림에서 차단/비차단 모드 설정
  • stream_set_timeout() - 스트림에 시간 초과 기간 설정
  • stream_select() - 초 및 마이크로초로 지정된 시간 제한을 사용하여 지정된 스트림 배열에서 select() 시스템 호출과 동일한 기능을 실행합니다.
  • fgets() - 파일 포인터에서 라인 가져오기
  • fgetss() - 파일 포인터에서 줄을 가져오고 HTML 태그를 제거합니다.
  • fwrite() - 바이너리 안전 파일 쓰기
  • fclose() - 열린 파일 포인터를 닫습니다
  • feof() - 파일 포인터에서 파일 끝 테스트
  • cURL Functions