Sockets socket_recvfrom

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

socket_recvfrom — 연결 지향 여부에 관계없이 소켓에서 데이터를 수신합니다.


설명

socket_recvfrom(
    Socket $socket,
    string &$data,
    int $length,
    int $flags,
    string &$address,
    int &$port = null
): int|false
                

socket_recvfrom() 함수는 socket을 사용하여 포트 port(소켓이 AF_UNIX 유형이 아닌 경우)의 address에서 datalength 바이트를 수신합니다. socket_recvfrom()은 연결된 소켓과 연결되지 않은 소켓 모두에서 데이터를 수집하는 데 사용할 수 있습니다. 또한 함수의 동작을 수정하기 위해 하나 이상의 플래그를 지정할 수 있습니다.

addressport는 참조로 전달되어야 합니다. 소켓이 연결 지향이 아닌 경우 address는 원격 호스트의 인터넷 프로토콜 주소 또는 UNIX 소켓의 경로로 설정됩니다. 소켓이 연결 지향인 경우 addressnull입니다. 또한, port에는 연결되지 않은 AF_INET 또는 AF_INET6 소켓의 경우 원격 호스트의 포트가 포함됩니다.

참고: 이 함수는 바이너리 안전합니다.


매개변수

socket
socketsocket_create()에 의해 이전에 생성된 Socket 인스턴스여야 합니다.
data
수신된 data는 데이터로 지정된 변수로 페치됩니다.
length
원격 호스트에서 최대 length 바이트를 가져옵니다.
flags
flags 값은 이진 OR(|) 연산자와 결합된 다음 플래그의 조합일 수 있습니다.

flags에 가능한 값

Flag 설명
MSG_OOB 대역 외 데이터를 처리합니다.
MSG_PEEK 큐에서 데이터를 제거하지 않고 수신 큐의 시작 부분에서 데이터를 수신합니다.
MSG_WAITALL 적어도 length가 수신될 때까지 차단합니다. 그러나 신호가 포착되거나 원격 호스트의 연결이 끊어지면 함수가 더 적은 데이터를 반환할 수 있습니다.
MSG_DONTWAIT 이 플래그를 설정하면 일반적으로 차단된 경우에도 함수가 반환됩니다.
address
소켓이 AF_UNIX 유형인 경우 address는 파일의 경로입니다. 그렇지 않으면 연결되지 않은 소켓의 경우 address는 원격 호스트의 IP 주소이거나 소켓이 연결 지향인 경우 null입니다.
port
이 인수는 AF_UNIXAF_INET6 소켓에만 적용되며 데이터가 수신되는 원격 포트를 지정합니다. 소켓이 연결 지향인 경우 portnull이 됩니다.

반환 값

socket_recvfrom()은 수신된 바이트 수를 반환하거나 오류가 있으면 false를 반환합니다. 실제 오류 코드는 socket_last_error()를 호출하여 검색할 수 있습니다. 이 오류 코드는 오류에 대한 텍스트 설명을 얻기 위해 socket_strerror()에 전달될 수 있습니다.


변경 로그

버전 설명
8.0.0 socket은 이제 Socket 인스턴스입니다. 이전에는 리소스였습니다.

Examples

예제 #1 socket_recvfrom() 예제

                  
<?php

$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($socket, '127.0.0.1', 1223);

$from = '';
$port = 0;
socket_recvfrom($socket, $buf, 12, 0, $from, $port);

echo "Received $buf from remote address $from and remote port $port" . PHP_EOL;
?>
                  
                

이 예는 127.0.0.1의 포트 1223에서 UDP 소켓을 시작하고 원격 호스트에서 수신한 최대 12개의 문자를 인쇄합니다.


기타