Streams stream_socket_server
(PHP 5, PHP 7, PHP 8)
stream_socket_server — 인터넷 또는 Unix 도메인 서버 소켓 만들기
설명
stream_socket_server( string $address, int &$error_code = null, string &$error_message = null, int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, ?resource $context = null ): resource|false
지정된 address
에 스트림 또는 데이터그램 소켓을 만듭니다.
이 함수는 연결 수락을 시작하기 위해 stream_socket_accept()를 사용하여 소켓만 생성합니다.
매개변수
address
- 생성된 소켓 유형은 표준 URL 형식인
transport://target
을 사용하여 지정된 전송에 의해 결정됩니다.TCP 및 UDP와 같은 인터넷 도메인 소켓(
AF_INET
)의 경우remote_socket
매개변수의target
부분은 호스트 이름 또는 IP 주소 다음에 콜론 및 포트 번호로 구성되어야 합니다. Unix 도메인 소켓의 경우target
부분은 파일 시스템의 소켓 파일을 가리켜야 합니다.환경에 따라 Unix 도메인 소켓을 사용하지 못할 수 있습니다. 사용 가능한 전송 목록은 stream_get_transports()를 사용하여 검색할 수 있습니다. bulitin 전송 목록은 List of Supported Socket Transports을 참조하세요.
error_code
- 선택적
error_code
및error_message
인수가 있는 경우 시스템 수준socket()
,bind()
및listen()
호출에서 발생한 실제 시스템 수준 오류를 나타내도록 설정됩니다.error_code
에 반환된 값이0
이고 함수가false
를 반환하면bind()
호출 전에 오류가 발생했음을 나타냅니다. 소켓 초기화 문제 때문일 가능성이 큽니다.error_code
및error_message
인수는 항상 참조로 전달됩니다. error_message
error_code
설명을 참조하십시오.flags
- 소켓 생성 플래그의 조합으로 설정할 수 있는 비트마스크 필드입니다.
메모: UDP 소켓의 경우
flags
매개변수로STREAM_SERVER_BIND
를 사용해야 합니다. context
반환 값
생성된 스트림을 반환하거나 오류가 발생하면 false
를 반환합니다.
변경 로그
버전 | 설명 |
---|---|
8.0.0 | context 는 이제 nullable입니다. |
Examples
예제 #1 TCP 서버 소켓 사용
<?php
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n");
fclose($conn);
}
fclose($socket);
}
?>
아래 예제는 stream_socket_client()의 예제와 같이 시간 쿼리에 응답할 수 있는 시간 서버 역할을 하는 방법을 보여줍니다.
참고: 대부분의 시스템은 1024 미만의 포트에서 서버 소켓을 생성하기 위해 루트 액세스가 필요합니다.
예제 #2 UDP 서버 소켓 사용
<?php
$socket = stream_socket_server("udp://127.0.0.1:1113", $errno, $errstr, STREAM_SERVER_BIND);
if (!$socket) {
die("$errstr ($errno)");
}
do {
$pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
echo "$peer\n";
stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer);
} while ($pkt !== false);
?>
메모
참고: 숫자 IPv6 주소(예: fe80::1
)를 지정할 때 IP를 대괄호로 묶어야 합니다(예: tcp://[fe80::1]:80
).
기타
- stream_socket_client() - Open Internet or Unix domain socket connection
- stream_set_blocking() - Set blocking/non-blocking mode on a stream
- stream_set_timeout() - Set timeout period on a stream
- fgets() - Gets line from file pointer
- fgetss() - Gets line from file pointer and strip HTML tags
- fwrite() - Binary-safe file write
- fclose() - Closes an open file pointer
- feof() - Tests for end-of-file on a file pointer
- Curl extension