Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 소켓 컨텍스트 옵션 완벽 정리: bindto부터 tcp_nodelay까지


소개

PHP에서는 stream_context_create()stream_context_set_option() 함수를 통해 파일 시스템 및 다양한 스트림 래퍼(stream wrapper)의 동작을 컨텍스트 옵션과 매개변수로 세밀하게 제어할 수 있습니다.

아래 표는 TCP, HTTP, FTP처럼 소켓 기반으로 동작하는 모든 래퍼에서 공통적으로 사용할 수 있는 소켓 컨텍스트 옵션을 정리한 것입니다.

주요 소켓 컨텍스트 옵션

옵션설명
bindto네트워크 접속에 사용할 IP 주소(IPv4 또는 IPv6)와 포트 번호를 지정합니다. IPv4는 ip:port 형식, IPv6는 [ip]:port 형식으로 작성합니다.
backlog소켓의 listen 큐에 대기시킬 수 있는 최대 연결 수를 제한합니다.
ipv6_v6only운영체제가 적용하는 IPv4→IPv6 매핑 기본 설정을 재정의합니다.
so_reuseport동일한 ip:port 쌍에 대한 중복 바인딩을 허용합니다.
so_broadcast브로드캐스트 주소와 데이터를 주고받을 수 있도록 활성화합니다.
tcp_nodelayTRUE로 설정하면 SOL_TCP, NO_DELAY=1이 적용되어 TCP Nagle 알고리즘이 비활성화되어 지연 없이 패킷을 전송합니다.

사용 예제

다음 예제는 특정 IP 주소(192.168.0.100)를 통해 외부 네트워크에 접속하고, 해당 컨텍스트를 이용해 웹 페이지 데이터를 가져오는 방법을 보여줍니다.

<?php
// '192.168.0.100' IP를 사용하여 인터넷에 접속
$opts = array(
    'socket' => array(
        'bindto' => '192.168.0.100:0',
    ),
);

// 옵션 배열로 스트림 컨텍스트 생성
$context = stream_context_create($opts);

// 생성한 컨텍스트를 사용하여 데이터 가져오기
echo file_get_contents('https://www.example.com', false, $context);
?>

참고 사항

bindto 값에서 포트 번호를 0으로 지정하면 운영체제가 자동으로 사용 가능한 포트를 선택합니다. 이 옵션은 여러 네트워크 인터페이스를 가진 서버에서 특정 IP를 통해 외부 요청을 보내야 할 때 특히 유용합니다. 또한 원본 예제에는 누락되어 있던 stream_context_create() 호출을 추가해야 컨텍스트가 정상적으로 적용된다는 점에 유의하세요.