Sockets socket_create_pair
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_create_pair — 구별할 수 없는 소켓 쌍을 만들고 배열에 저장합니다.
설명
socket_create_pair( int $domain, int $type, int $protocol, array &$pair ): bool
socket_create_pair()는 두 개의 연결되고 구별할 수 없는 소켓을 만들고 pair
으로 저장합니다. 이 함수는 IPC(InterProcess Communication)에서 일반적으로 사용됩니다.
매개변수
domain
domain
매개변수는 소켓에서 사용할 프로토콜 패밀리를 지정합니다. 전체 목록은 socket_create()를 참조하십시오.type
type
매개변수는 소켓에서 사용할 통신 유형을 선택합니다. 전체 목록은 socket_create()를 참조하십시오.protocol
protocol
매개변수는 반환된 소켓에서 통신할 때 사용할 지정된domain
내의 특정 프로토콜을 설정합니다. getprotobyname()을 사용하여 이름으로 적절한 값을 검색할 수 있습니다. 원하는 프로토콜이 TCP 또는 UDP인 경우 해당 상수SOL_TCP
및SOL_UDP
도 사용할 수 있습니다.지원되는 프로토콜의 전체 목록은 socket_create()를 참조하십시오.
pair
- 두 개의 Socket 인스턴스가 삽입될 배열에 대한 참조입니다.
반환 값
성공하면 true
를, 실패하면 false
를 반환합니다.
변경 로그
버전 | 설명 |
---|---|
8.0.0 | pair 는 이제 Socket 인스턴스의 배열에 대한 참조입니다. 이전에는 리소스 배열에 대한 참조였습니다. |
Examples
예제 #1 socket_create_pair() 예제
<?php
$sockets = array();
/* On Windows we need to use AF_INET */
$domain = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' ? AF_INET : AF_UNIX);
/* Setup socket pair */
if (socket_create_pair($domain, SOCK_STREAM, 0, $sockets) === false) {
echo "socket_create_pair failed. Reason: ".socket_strerror(socket_last_error());
}
/* Send and Receive Data */
if (socket_write($sockets[0], "ABCdef123\n", strlen("ABCdef123\n")) === false) {
echo "socket_write() failed. Reason: ".socket_strerror(socket_last_error($sockets[0]));
}
if (($data = socket_read($sockets[1], strlen("ABCdef123\n"), PHP_BINARY_READ)) === false) {
echo "socket_read() failed. Reason: ".socket_strerror(socket_last_error($sockets[1]));
}
var_dump($data);
/* Close sockets */
socket_close($sockets[0]);
socket_close($sockets[1]);
?>
예제 #2 socket_create_pair() IPC 예제
<?php
$ary = array();
$strone = 'Message From Parent.';
$strtwo = 'Message From Child.';
if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $ary) === false) {
echo "socket_create_pair() failed. Reason: ".socket_strerror(socket_last_error());
}
$pid = pcntl_fork();
if ($pid == -1) {
echo 'Could not fork Process.';
} elseif ($pid) {
/*parent*/
socket_close($ary[0]);
if (socket_write($ary[1], $strone, strlen($strone)) === false) {
echo "socket_write() failed. Reason: ".socket_strerror(socket_last_error($ary[1]));
}
if (socket_read($ary[1], strlen($strtwo), PHP_BINARY_READ) == $strtwo) {
echo "Received $strtwo\n";
}
socket_close($ary[1]);
} else {
/*child*/
socket_close($ary[1]);
if (socket_write($ary[0], $strtwo, strlen($strtwo)) === false) {
echo "socket_write() failed. Reason: ".socket_strerror(socket_last_error($ary[0]));
}
if (socket_read($ary[0], strlen($strone), PHP_BINARY_READ) == $strone) {
echo "Received $strone\n";
}
socket_close($ary[0]);
}
?>
기타
- socket_create() - 소켓 생성(통신을 위한 끝점)
- socket_create_listen() - 연결을 수락하기 위해 포트의 소켓을 엽니다.
- socket_bind() - 소켓에 이름을 바인드
- socket_listen() - 소켓에서 연결을 수신합니다.
- socket_last_error() - 소켓의 마지막 오류를 반환합니다.
- socket_strerror() - 소켓 오류를 설명하는 문자열 반환