이러한 소켓 함수는 인터넷 프로토콜과 직접 통신하여 정보를 보냅니다. fopensock의 스트림과 비교하면 상대적으로 낮은 수준에서 작동합니다. 일반적으로 C 함수를 캡슐화하고 비슷한 이름을 갖습니다. C로 소켓 프로그래밍을 해본 경험이 있다면 이러한 기능을 매우 편안하게 사용할 수 있을 것입니다. 여기서는 소켓 프로그래밍에 대해 특별히 자세히 설명하지 않습니다.
이러한 기능을 사용하면 상위 수준 기능에서는 해결할 수 없는 어려운 문제를 해결할 수 있습니다. 이러한 함수를 사용하면 fopen과 유사한 기능을 구현할 수 있습니다(예: PHP에서 CLI(명령줄 인터페이스)를 사용하여 구현된 인터넷 데몬).
리소스 소켓_accept(리소스 소켓)
스크립트의 서버 측에서 소켓_accept를 사용하여 들어오는 연결을 수락합니다. 먼저 소켓을 생성하고 이름에 바인딩한 다음 포트에서 수신 대기하도록 설정해야 합니다. 블록 모드에서 소켓_accept는 허용되는 고유한 연결을 생성합니다. 비차단 모드에서는 연결이 설정되지 않은 경우 false를 반환합니다. 또한 새 소켓 리소스가 있으면 읽기 및 쓰기 작업을 수행할 수 있습니다.
아래에서는 간단한 에코 서버를 보여드리겠습니다. CLI(명령줄)에서 실행되며 포트 12345에서 클라이언트 연결을 기다립니다.
소켓_수락
<?php
set_time_limit(0);
//소켓 생성
if(($socket = 소켓_create(AF_INET, SOCK_STREAM, 0)) < 0){
print("소켓을 생성할 수 없습니다: " . 소켓_strerror(socket_last_error()) . "n");
}
//주어진 주소와 포트에 바인딩
if(($error = 소켓_bind($socket, gethostbyname($_SERVER['HOSTNAME']), 12345)) < 0){
print("소켓을 바인딩할 수 없습니다: " . 소켓_strerror(socket_last_error()) . "n");
}
if(($error = 소켓_listen($socket, 5)) < 0){
print("소켓에 나열할 수 없습니다: " .
소켓_strerror(socket_last_error()) "n");
}
동안(참){
//연결 대기
if(($accept = 소켓_accept($socket)) < 0){
print("읽는 중 오류: " .socket_strerror($message) . "n");
부서지다;
}
//환영 메시지 보내기
소켓_write($accept, "연결이 승인되었습니다n");
print(date('Ymd H:i:s') . " 상태: 연결이 승인되었습니다n");
ob_flush();
동안(참){
//클라이언트에서 라인 읽기
if(FALSE === ($line = 소켓_read($accept, 1024))){
print("소켓에서 읽을 수 없습니다: " .
소켓_strerror(socket_last_error()) "n");
휴식 2;
}
if( !@socket_write($accept , "ECHO: $line")){
print(date('Ymd H:i:s') . " 상태: 연결이 중단되었습니다n");
부서지다;
}
print(date('Ymd H:i:s') . " READ: $line");
ob_flush();
}
소켓_닫기($accept);
}
?>
bool 소켓_bind(리소스 소켓, 문자열 주소, 정수 포트)
이 소켓_바인드()는 소켓 자원을 주소에 바인딩합니다. 이 소켓은 소켓_create() 함수에 의해 반환된 리소스여야 합니다. 이 주소는 IP 주소이거나 Unix 소켓에 대한 경로여야 합니다. 인터넷에서 실행되는 소켓인 경우 포트도 제공해야 합니다.
Socket_clear_error(리소스 소켓)
이 함수는 지정된 소켓에 대한 오류를 지울 수 있습니다. 매개변수가 지정되지 않으면 모든 소켓 오류가 지워집니다.
Socket_close(리소스 소켓)
소켓_close 함수는 소켓을 닫고 소켓이 차지하는 메모리 리소스를 지웁니다.
boolean 소켓_connect(리소스 소켓, 문자열 주소, 정수 포트)
이 함수는 포트나 소켓에 대한 클라이언트 연결을 생성합니다. Socket_create로 생성된 소켓을 제공해야 합니다. 주소 매개변수는 소켓 경로 또는 IP 주소여야 합니다. 후자인 경우에는 숫자 포트 번호도 와야 합니다.
다음 예제에서는 UDP 프로토콜을 사용하여 게임 서버에 연결하고 정보를 얻는 과정을 보여줍니다.
소켓_연결
<?php
//UDP 소켓 생성
if(($socket = 소켓_create(AF_INET, SOCK_DGRAM, SOL_UDP)) < 0){
print("소켓을 생성할 수 없습니다: " .
소켓_strerror(socket_last_error()) "n");
}
//5초 후 타임아웃
소켓_세트_옵션($소켓, SOL_SOCKET,
SO_RCVTIMEO, array('sec'=>5,'usec'=>0));
//RtCW 마스터 서버에 연결
if(!socket_connect($socket, 'wolfmaster.idsoftware.com', 27950)){
print("연결할 수 없습니다: " .
소켓_strerror(socket_last_error()) "n");
}
//서버에 대한 요청 보내기
Socket_write($socket, "xFFxFFxFFxFFgetserversx00");
//서버 가져오기
$서버 = 배열();
while(FALSE !== ($line = @socket_read($socket, 4096))){
//데이터 구문 분석
for($i=22; ($i+5) < strlen($line); $i += 7){
$ip = ord(substr($line, $i+1, 1)) '.'
ord(substr($line, $i+2, 1)) '.'
ord(substr($line, $i+3, 1)) '.'
ord(substr($line, $i+4, 1));
$port = (ord(substr($line, $i+5, 1)) * 256) +
ord(substr($line, $i+6, 1));
$server[] = array('ip'=>$ip, 'port'=>$port);
}
}
print("<h1>" . count($server) . " 서버</h1>n");
//서버를 반복하여 상태를 가져옵니다.
foreach($server를 $s로){
print("<h1>{$s['ip']}:{$s['port']}</h1>n");
//RTCW 서버에 연결
if(!socket_connect($socket, $s['ip'], $s['port'])){
print("<p>n" .
소켓_strerror(socket_last_error()) .
"n</p>n");
계속하다;
}
//상태 요청 보내기
Socket_write($socket, "xFFxFFxFFxFFgetstatusx00");
//서버에서 상태 가져오기
if(FALSE === ($line = @socket_read($socket, 1024))){
print("<p>n" .
소켓_strerror(socket_last_error()) .
"n</p>n");
계속하다;
}
$part = 폭발("n", $line);
//설정은 백슬래시로 구분된 두 번째 줄에 있습니다.
$setting = 폭발("\", $part[1]);
print("<h2>구성</h2>n");
print("<p>n");
for($s=1; $s < 개수($setting); $s += 2){
print("tt{$setting[$s]} = {$setting[$s+1]}<br>n");
}
인쇄("</p>n");
print("<h2>플레이어</h2>n");
$lastPlayer = 개수($part) - 1;
for($p=2; $p < $lastPlayer; $p++){
$player = 폭발(" ", $part[$p]);
print("{$player[2]} 점수={$player[0]} " .
"핑={$player[1]}<br>n");
}
인쇄("</p>n");
ob_flush();
}
print("</table>n");
소켓_닫기($socket);
?>
리소스 소켓_create(정수 계열, 정수 소켓_유형, 정수 프로토콜)
소켓_create는 소켓 구조를 초기화합니다. 첫 번째 매개변수는 프로토콜 계열 또는 도메인입니다. 인터넷 연결을 지정하려면 AF_INET을 사용해야 하고 Unix 소켓 연결을 지정하려면 AF_UNIX를 사용해야 합니다. 두 번째 매개변수는 소켓 유형으로, 아래 표에서 선택할 수 있습니다. 일반적으로 TCP 프로토콜을 사용하려면 SOCK_STREAM을 사용하고, SOCK_DGRAM을 사용하려면 UDP 프로토콜을 사용합니다. 세 번째 매개변수는 프로토콜을 지정합니다. TCP 및 UDP 프로토콜에 각각 대응하려면 SOL_TCP 또는 SOL_UDP를 사용하십시오. 또 다른 옵션은 getprotobyname 함수를 사용하여 이를 처리할 수 있다는 것입니다.
소켓 유형 상수 설명
SOCK_DGRAM은 자동으로 패킷 소켓 주소를 지정합니다.
SOCK_RAW RAW 프로토콜 인터페이스
SOCK_RDM 안정적인 메시지 교환
SOCK_SEQPACKET 순차 데이터 패킷 소켓
SOCK_STREAM 스트림 소켓
리소스 소켓_create_listen(정수 포트, 정수 백로그)
소켓_create_listen을 사용하는 것은 수신 대기용 소켓을 생성하기 위해 소켓_create보다 간단한 방법입니다. 생성된 소켓은 지정된 포트를 수신하며 선택적 매개변수 backlog는 허용되는 최대 연결 수를 설정하는 것입니다.
부울 소켓_create_pair(정수 계열, 정수 소켓_유형, 정수 프로토콜, 배열 핸들)
소켓_create_pair 함수는 소켓 연결 쌍을 생성합니다. 우선, 처음 세 개의 매개변수는 소켓 생성에 대한 설명입니다. 핸들 매개변수는 두 개의 소켓 자원을 포함하는 배열입니다. 이 함수는 C의 소켓 쌍 함수를 캡슐화한 것입니다.
소켓_생성_쌍
<?php
if(!socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $socket)){
print("소켓을 만들 수 없습니다!n");
출구();
}
$child = pcntl_fork();
if($child == -1){
print("포크할 수 없습니다!n");
출구();
}
elseif($자식 > 0){
//조상
소켓_닫기($socket[0]);
print("부모: 메시지를 기다리는 중n");
$message = 소켓_read($socket[1], 1024, PHP_NORMAL_READ);
print("부모: 메시지를 받았습니다--$messagen");
소켓_write($socket[1], "안녕하세요, 하위 프로세스!n");
pcntl_waitpid($child, $status);
}또 다른{
//어린이
소켓_닫기($socket[1]);
소켓_write($socket[0], "안녕하세요, 상위 프로세스!n");
print("하위: 메시지를 기다리는 중n");
$message = 소켓_read($socket[0], 1024, PHP_NORMAL_READ);
print("하위: 메시지를 받았습니다--$messagen");
출구(0);
}
?>
value 소켓_get_option(리소스 소켓, 정수 수준, 정수 옵션)
소켓_get_option 함수는 다음 표에 나열된 추가 값을 반환합니다. 소켓_create에 의해 생성된 소켓 리소스와 레벨을 제공해야 합니다. 획득한 소켓 레벨은 SOL_SOCKET을 사용하여 확인할 수 있습니다. 또는 SOL_TCP와 같은 프로토콜을 사용하여 TCP 프로토콜을 나타냅니다. 이러한 옵션은 Socket_set_option으로 설정할 수 있습니다.
소켓_get_옵션
<?php
$socket = 소켓_생성(AF_INET, SOCK_STREAM, SOL_TCP);
print('SO_BROADCAST: ' .
소켓_get_옵션($socket, SOL_SOCKET,
SO_BROADCAST) . "<br>n");
print('SO_DEBUG: ' .
소켓_get_옵션($socket, SOL_SOCKET,
SO_DEBUG) . "<br>n");
print('SO_DONTROUTE: ' .
소켓_get_옵션($socket, SOL_SOCKET,
SO_DONTROUTE) . "<br>n");
print('SO_ERROR: ' .
소켓_get_옵션($socket, SOL_SOCKET,
SO_ERROR) . "<br>n");
print('SO_KEEPALIVE: ' .
소켓_get_옵션($socket, SOL_SOCKET,
SO_KEEPALIVE) . "<br>n");
print('SO_LINGER: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_LINGER), TRUE) "<br>n");
print('SO_OOBINLINE: ' .
소켓_get_옵션($socket, SOL_SOCKET,
SO_OOBINLINE) . "<br>n");
print('SO_RCVBUF: ' .
소켓_get_옵션($socket, SOL_SOCKET,
SO_RCVBUF) . "<br>n");
print('SO_RCVLOWAT: ' .
소켓_get_옵션($socket, SOL_SOCKET,
SO_RCVLOWAT) . "<br>n");
print('SO_RCVTIMEO: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_RCVTIMEO), TRUE) "<br>n");
print('SO_REUSEADDR: ' .
소켓_get_옵션($socket, SOL_SOCKET,
SO_REUSEADDR) . "<br>n");
print('SO_SNDBUF: ' .
소켓_get_옵션($socket, SOL_SOCKET,
SO_SNDBUF) . "<br>n");
print('SO_SNDLOWAT: ' .
소켓_get_옵션($socket, SOL_SOCKET,
SO_SNDLOWAT) . "<br>n");
print('SO_SNDTIMEO: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_SNDTIMEO), TRUE) "<br>n");
print('SO_TYPE: ' .
소켓_get_옵션($socket, SOL_SOCKET,
SO_TYPE) . "<br>n");
?>
소켓 옵션 테이블 옵션 설명
SO_BROADCAST를 사용하면 자동으로 주소가 지정된 소켓이 브로드캐스트 패킷을 보내고 받을 수 있습니다.
SO_DEBUG는 소켓 디버깅 기능을 활성화합니다. 루트만이 이 옵션을 활성화할 수 있는 권한을 갖습니다.
SO_DONTROUTE는 게이트웨이를 통한 라우팅 패킷을 허용하지 않습니다.
SO_ERROR 마지막 소켓 오류를 가져오고 지웁니다. 이 옵션은 설정하지 않아도 됩니다.
SO_KEEPALIVE 활성 상태로 남아 있는 메시지를 엽니다.
SO_LINGER Socket_colse 및 소켓_shutdown은 메시지 전송 시간 초과를 중단합니다. 이 옵션은 l_onoff 및 l_linger 두 키를 포함하는 배열을 사용합니다.
SO_OOBINLINE은 데이터를 수신 버퍼에 직접 삽입합니다.
SO_RCVBUF는 버퍼링할 수 있는 최대 바이트 수를 제한합니다.
SO_RCVLOWAT는 최소 데이터를 수용하여 지연합니다.
SO_RCVTIMEO 배열의 두 키(sec 및 usec)를 사용하여 승인 시간 초과 보고를 지연합니다.
SO_REUSEADDR은 로컬 주소 재사용을 허용합니다.
SO_SNDBUF는 전송 버퍼의 최대 바이트를 제한합니다.
SO_SNDLOWAT는 최소 바이트를 허용하면서 이 프로토콜로의 데이터 전송을 지연합니다.
SO_SNDTIMEO 발신자가 시간 초과를 통과할 때 시간 초과 오류 보고를 지연합니다. 이 옵션은 배열의 키인 sec 및 usec를 사용합니다.
SO_TYPE 소켓 유형을 가져옵니다. 이 옵션은 설정할 필요가 없습니다.
boolean 소켓_getpeername(리소스 소켓, 문자열 주소, 정수 포트)
소켓_getpeername은 지정된 연결에서 주소와 포트를 얻습니다. 연결이 Unix 소켓인 경우 파일 시스템 경로가 반환됩니다.
부울 소켓_getsockname(리소스 소켓, 문자열 주소, 정수 포트)
소켓_getsockname은 소켓에 이름을 배치하고 주소 및 포트 매개변수를 추가합니다. 실패 시 false를 반환합니다.
(아래의 소켓_iovec_* 함수에 대해서는 잘 몰라서 감히 임의로 번역할 수가 없어서 원문 그대로 유지합니다)
부울 소켓_iovec_add(자원 io벡터, 정수 길이)
소켓_iovec_add 기능은 분산/수집 배열에 I/O 벡터를 추가합니다.
리소스 소켓_iovec_alloc(정수 개수, …)
소켓_iovec_alloc 함수는 I/O 벡터 컬렉션을 처리하기 위한 리소스를 반환합니다. 첫 번째 인수는 벡터 수를 지정합니다.
부울 소켓_iovec_delete(자원 io벡터, 정수 위치)
소켓_iovec_delete 함수는 주어진 위치에서 I/O 벡터를 제거합니다.
문자열 소켓_iovec_fetch(자원 io벡터, 정수 위치)
소켓_iovec_fetch 함수는 I/O 벡터 리소스에 지정된 벡터의 값을 반환합니다.
부울 소켓_iovec_free(자원 io벡터)
소켓_iovec_free 함수는 I/O 벡터 리소스에 사용되는 메모리를 해제합니다.
부울 소켓_iovec_set(자원 io벡터, 정수 위치, 문자열 값)
소켓_iovec_set은 주어진 위치에서 I/O 벡터의 값을 설정합니다.
정수 소켓_last_error(자원 소켓)
소켓_last_error 함수는 작업의 소켓 함수에 의해 생성된 마지막 오류를 반환합니다. 위 함수에서 지정된 연결에 소켓 리소스의 소켓 옵션을 설정했을 수 있습니다. 다음 표에는 반환된 오류 코드가 나열되어 있습니다. soclet_strerror 함수를 사용하여 자세한 오류를 얻을 수도 있습니다. 소켓 오류를 지우려면 소켓_clear_error 함수를 사용하십시오.
소켓 오류 코드 테이블 상수 설명
SOCKET_E2BIG 매개변수 목록이 너무 깁니다.
SOCKET_EACCES에는 권한이 없습니다.
SOCKET_EADDRINUSE 주소가 이미 사용 중입니다.
SOCKET_EADDRNOTAVAIL이 요청된 주소를 확인할 수 없습니다.
SOCKET_EADV 브로드캐스트(광고) 오류
SOCKET_EAFNOSUPPORT 프로토콜은 주소 계열에서 지원되지 않습니다.
SOCKET_EAGAIN 리소스를 일시적으로 사용할 수 없습니다.
SOCKET_EALREADY 작업이 이미 실행 중입니다.
SOCKET_EBADE 잘못된 교환
SOCKET_EBADF 잘못된 파일 설명자
SOCKET_EBADFD 파일 설명자 오류 상태
SOCKET_EBADMSG 오류 메시지
SOCKET_EBADR 잘못된 요청 설명
SOCKET_EBADRQC 잘못된 요청 코드
SOCKET_EBADSLT 잘못된 작업 위치
SOCKET_EBUSY 드라이버 또는 리소스가 사용 중입니다.
SOCKET_ECHRNG 채널 번호가 범위를 벗어났습니다.
SOCKET_ECOMM 전송 통신 오류
SOCKET_ECONNABORTED 소프트웨어 문제로 인한 트래픽 중단
SOCKET_ECONNREFUSED 연결이 거부되었습니다.
SOCKET_ECONNRESET 연결이 동일한 소켓에 의해 재설정됩니다.
SOCKET_EDESTADDRREQ에는 대상 주소가 필요합니다.
SOCKET_EDQUOT 디스크 할당량이 초과되었습니다.
SOCKET_EEXIST 파일이 이미 존재합니다.
SOCKET_EFAULT 잘못된 주소
SOCKET_EHOSTDOWN 호스트가 다운되었습니다.
SOCKET_EHOSTUNREACH가 호스트로 라우팅되지 않습니다.
SOCKET_EIDRM은 ID가 삭제되었음을 나타냅니다.
SOCKET_EINPROGRESS 작업이 실행 중입니다.
SOCKET_EINTR 시스템 호출이 차단되었습니다.
SOCKET_EINVAL 잘못된 매개변수
SOCKET_EIO 입출력 오류
SOCKET_EISCONN 전송 단말이 연결되었습니다.
SOCKET_EISDIR은 디렉터리입니다.
SOCKET_EISNAM은 지정된 유형 파일입니다.
SOCKET_EL2HLT 레벨 2가 중단되었습니다.
SOCKET_EL2NSYNC 레벨 2가 동기화되지 않음
SOCKET_EL3HLT 레벨 3이 중단되었습니다.
SOCKET_EL3RST 레벨 3이 재설정되었습니다.
SOCKET_ELNRNG 연결 번호가 범위를 벗어났습니다.
SOCKET_ELOOP 심볼릭 링크 수준이 너무 많습니다.
SOCKET_EMEDIUMTYPE 잘못된 미디어 유형(중간 유형)
SOCKET_EMFILE 열려 있는 파일이 너무 많습니다.
SOCKET_EMLINK 연결이 너무 많습니다.
SOCKET_EMSGSIZE 메시지가 너무 깁니다.
SOCKET_EMULTIHOP 시도 횟수가 너무 많습니다.
SOCKET_ENAMETOOLONG 파일 이름이 너무 깁니다.
SOCKET_ENETDOWN 네트워크가 다운되었습니다.
SOCKET_ENETRESET 네트워크가 중단되어 연결이 재설정되었습니다.
SOCKET_ENETUNREACH네트워크에 연결할 수 없습니다.
SOCKET_ENFILE 시스템에 열려 있는 파일이 너무 많습니다.
SOCKET_ENOANO 양극 없음
SOCKET_ENOBUFS 사용 가능한 캐시 공간이 없습니다.
SOCKET_ENOCSI 사용 가능한 CSI 구조가 없습니다.
SOCKET_ENODATA 사용 가능한 데이터가 없습니다.
SOCKET_ENODEV 해당 드라이버가 없습니다.
SOCKET_ENOENT 해당 파일이나 디렉터리가 없습니다.
SOCKET_ENOLCK 사용 가능한 레코드 잠금이 없습니다.
기존 서비스에 대한 SOCKET_ENOLINK 연결
SOCKET_ENOMEDIUM 매체를 찾을 수 없습니다.
SOCKET_ENOMEM은 메모리를 할당할 수 없습니다.
SOCKET_ENOMSG 지정된 메시지 유형이 없습니다.
SOCKET_ENONET 장치가 네트워크에 없습니다
SOCKET_ENOPROTOOPT 프로토콜을 사용할 수 없습니다.
SOCKET_ENOSPC 드라이브에 공간이 없습니다
SOCKET_ENOSR이 스트림 리소스를 초과했습니다.
SOCKET_ENOSTR 드라이버가 스트림이 아닙니다.
SOCKET_ENOSYS 함수가 실행되지 않습니다.
SOCKET_ENOTBLK 블록 드라이버가 필요합니다.
SOCKET_ENOTCONN 송신단이 연결되지 않았습니다.
SOCKET_ENOTDIR에 디렉터리가 없습니다.
SOCKET_ENOTEMPTY 디렉터리가 비어 있습니다.
SOCKET_ENOTSOCK 비소켓에서의 소켓 작업
SOCKET_ENOTTY 호환되지 않는 IO 컨트롤러
SOCKET_ENOTUNIQ 이름이 네트워크에서 고유하지 않습니다.
SOCKET_ENXIO 해당 드라이버 또는 주소가 없습니다.
SOCKET_EOPNOTSUPP 작업은 지원되지 않습니다.
SOCKET_EPERM 작업이 허용되지 않습니다.
SOCKET_EPFNOSUPPORT 프로토콜 계열은 지원되지 않습니다.
SOCKET_EPIPE 실패 파이프
SOCKET_EPROTO 프로토콜 오류
SOCKET_EPROTONOSUPPORT 프로토콜은 지원되지 않습니다.
SOCKET_EPROTOTYPE 소켓의 프로토콜 오류 유형입니다.
SOCKET_EREMCHG 원격 주소가 변경되었습니다.
SOCKET_EREMOTE 개체가 원격입니다.
SOCKET_EREMOTEIO 원격 I/O 오류
SOCKET_ERESTART 중단된 시스템 호출이 다시 시작됩니다.
SOCKET_EROFS 파일 시스템은 읽기 전용입니다.
SOCKET_ESHUTDOWN. 전송 끝점 인터럽트를 보낼 수 없습니다.
SOCKET_ESOCKTNOSUPPORT 소켓 유형이 지원되지 않습니다.
SOCKET_ESPIPE 불법 검색
SOCKET_ESTRPIPE 스트림 파이프 오류
SOCKET_ETIME 타이머가 만료되었습니다.
SOCKET_ETIMEDOUT 연결 시간 초과
SOCKET_ETOOMANYREFS 결합할 연결이 너무 많습니다.
SOCKET_EUNATCH 프로토콜 드라이버를 연결할 수 없습니다.
SOCKET_EUSERS 사용자가 너무 많습니다.
SOCKET_EWOULDBLOCK 리소스를 일시적으로 사용할 수 없습니다.
SOCKET_EXDEV 잘못된 크로스 드라이브 연결
SOCKET_EXFULL 교환은 전체
부울 소켓_listen(리소스 소켓, 정수 백로그)
입니다.
이 소켓_리스닝 함수는 클라이언트로부터의 연결을 기다립니다. backlog 매개변수는 연결을 기다릴 수 있는 최대 대기열 수를 설정합니다.
string 소켓_read(리소스 소켓, 정수 길이, 정수형)
소켓_read 함수는 특정 소켓에서 지정된 바이트를 읽고 오류가 있는 경우 false를 반환합니다. 기본적으로 바이너리 안전 읽기 모드가 사용됩니다. 외부에서 유형 매개변수를 PHP_BINARY_READ로 설정하여 읽기 모드를 변경할 수 있습니다. 유형을 PHP_NORMAL_READ로 설정할 수도 있습니다.
부울 소켓_readv(리소스 소켓, 리소스 io벡터)
소켓_readv 함수는 읽은 데이터를 ioVector 리소스에 삽입합니다.
정수 소켓_recv(리소스 소켓, 문자열 버퍼, 정수 길이, 정수 플래그)
소켓_recv 함수는 데이터를 읽고 이를 버퍼에 삽입합니다. Length 매개변수는 읽을 최대 바이트 수를 설정하고, flag 매개변수는 MSG_OOB 또는 MSG_PEEK를 사용할 수 있습니다. 이 함수는 읽은 바이트 수를 반환합니다.
정수 소켓_recvfrom(리소스 소켓, 문자열 버퍼, 정수 길이, 문자열 호스트, 정수 포트)
소켓_frcvfrom 함수는 데이터를 읽고 이를 캐시에 삽입합니다. Length 매개변수는 수신이 허용되는 최대 바이트 수를 설정합니다. 플래그 매개변수는 MSG_OOB 또는 MSG_PEEK로 설정할 수 있습니다. PHP는 호스트에서 보낸 데이터를 얻을 수 있도록 호스트 및 포트 매개 변수를 적절한 값으로 설정합니다.
부울 소켓_recvmsg(리소스 소켓, 리소스 io벡터, 배열 제어, 정수 길이, 정수 플래그, 문자열 호스트, 정수 포트)
소켓_recvmsg 함수는 소켓에서 데이터를 읽고 이를 I/O 벡터 리소스에 삽입합니다. PHP 설정 제어 매개변수는 cmsg_level, cmsg_type 및 cmsg_data의 세 가지 요소를 포함하는 연관 배열입니다. 길이 매개변수는 데이터 획득에 관한 데이터에 첨부되는 길이 매개변수이다. Flags 매개변수는 허용되는 값과 반환 값을 설정합니다. 이 글을 쓰는 시점에는 PHP가 모든 출력 상수를 실행할 수 없습니다. PHP는 원격 호스트에서 보낸 데이터를 얻기 위해 호스트 및 포트 매개 변수를 적절한 값으로 설정합니다.
(Socket_slect 함수는 단어의 의미가 전달되지 않을까봐 번역하지 않았습니다.)
정수 소켓_select(배열 읽기, 배열 쓰기, 배열 예외, 정수 timeout_seconds, 정수 timeout_microseconds)
소켓_선택 함수는 소켓 변경을 기다립니다. PHP는 읽기 배열에 지정된 소켓에서 들어오는 새 데이터를 감시합니다. PHP는 쓰기 배열에 제공된 스트림을 관찰하여 더 많은 데이터를 받을 준비가 되었는지 확인합니다. 오류의 경우 timeout_seconds 인수에 지정된 시간(초)이 지나면 함수는 선택적인 timeout_microseconds 인수를 사용하여 1초 미만의 시간 초과를 지정합니다.
소켓_선택 함수는 변경된 소켓 수를 반환하고 오류가 발생한 경우 FALSE를 반환합니다. 또한 이 함수는 변경된 소켓만 포함하도록 지정된 배열을 수정합니다.
감시할 특정 유형의 소켓이 없으면 빈 배열이나 NULL로 설정된 변수를 전달할 수 있습니다.
정수 소켓_send(리소스 소켓, 문자열 버퍼, 정수 길이, 정수 플래그)
소켓_send 함수는 데이터를 버퍼에 쓴 다음 이를 연결에 삽입합니다. 버퍼에 대해 쓰기 가능한 최대 바이트 수를 지정해야 합니다. flags 매개변수를 비어 있거나 결합된 상수 MSG_DONTROUTE 및 MSG_OOB 중 하나로 설정할 수도 있습니다. 함수는 종료되고 쓰여진 바이트 수를 반환합니다. 그렇지 않으면 false를 반환합니다.
부울 소켓_sendmsg(리소스 소켓, 리소스 io벡터, 정수 플래그, 문자열 주소, 정수 포트)
소켓_sendmsg는 소켓에 데이터 전송을 시도합니다. 비연결형 소켓에 적합합니다. IoVector 매개변수는 소켓_iovec_alloc 함수에 의해 생성된 리소스입니다. 플래그 매개변수를 NULL, MSG_DONTROUTE, MSG_OOB 또는 두 개의 결합된 상수로 지정해야 합니다. 인터넷 요청에 대한 주소와 포트를 지정해야 합니다.
Socket_sendmsg 함수는 데이터를 보낼 때 true를 반환하지만 데이터가 도착한다는 보장은 없습니다.
정수 소켓_sendto(리소스 소켓, 문자열 버퍼, 정수 길이, 정수 플래그, 문자열 주소, 정수 포트)
소켓_sendto 함수는 버퍼에 데이터를 쓰고 이를 소켓으로 보내려고 시도합니다. 대부분의 비연결 소켓에 적합합니다. 플래그를 NULL, MSG_DONTROUTE, MSG_OOB 또는 두 상수의 조합으로 지정해야 합니다. 주소와 요청된 포트도 지정해야 합니다.
Socket_sendto 함수는 데이터가 전송될 때 true를 반환하지만 데이터가 도착할 것이라는 보장은 없습니다.
부울 소켓_set_block(리소스 소켓)
소켓_set_block 함수는 소켓을 기본 모드인 블록 모드로 설정합니다. 블록 모드에서는 완료된 요청에 대해 I/O 작업이 수행됩니다.
부울 소켓_set_nonblock(자원 소켓)
소켓_set_nonblock 함수는 소켓이 비블록 모드에 삽입되도록 설정합니다. 비블록 모드에서는 데이터가 없더라도 I/O 작업이 즉시 반환됩니다.
boolean 소켓_set_option(리소스 소켓, 정수 수준, 정수 옵션, 정수 값)
소켓_set_option 함수는 소켓에 대한 옵션을 설정합니다. Level 매개변수는 레벨에 플래그를 지정하는 상수를 설정합니다. 유효한 값은 SOL_SOCKET, SOL_TCP 및 SOL_UDP입니다. 옵션 매개변수는 위 소켓 옵션 표의 상수와 일치해야 합니다.
부울 소켓_shutdown(리소스 소켓, 정수 방법)
소켓_shutdown 함수는 I/O를 위해 소켓을 닫습니다. 방법을 0으로 설정하면 데이터 수신이 중지되고, 1로 설정하면 데이터 전송이 중지되며, 2로 설정하면 두 작업이 모두 중지됩니다.
문자열 소켓_strerror(정수 오류)
소켓_strerror 함수는 오류 번호와 자세한 오류 정보를 반환합니다.
정수 소켓_write(리소스 소켓, 문자열 버퍼, 정수 길이)
소켓_쓰기 함수는 버퍼에 데이터를 쓴 다음 이를 소켓에 출력합니다. 길이 매개변수를 지정하여 버퍼의 최대 바이트 수를 지정할 수 있습니다. 이 함수는 일반적으로 Socket_send보다 더 편리합니다.
부울 소켓_writev(리소스 소켓, 리소스 io벡터)
소켓_writev 함수는 I/O 벡터를 통해 소켓에 데이터를 씁니다.