
stream_socket_server 함수의 두 번째 인자인 $opts는 TCP 서버를 생성할 때 사용할 옵션을 지정하는 배열입니다. 이 옵션을 설정하는 방법은 다음과 같습니다.
- 소켓 옵션을 설정할 때는 stream_socket_server 함수에 두 번째 인자로 배열을 전달합니다. 예를 들어, 소켓 옵션을 설정할 때는 다음과 같이 할 수 있습니다.
#hostingforum.kr
php
$opts = array(
'backlog' => 10, // 소켓의 백로그를 10으로 설정
'tcp_nodelay' => true, // TCP_NODELAY 옵션을 활성화
'tcp_keepalive' => true, // TCP_KEEPALIVE 옵션을 활성화
);
$server = stream_socket_server('localhost:8080', $errno, $errstr, $opts);
소켓 옵션에서 주로 사용하는 옵션은 다음과 같습니다.
- backlog: 소켓의 백로그를 설정합니다. 백로그는 소켓이 수신할 수 있는 최대 연결의 수입니다.
- tcp_nodelay: TCP_NODELAY 옵션을 활성화합니다. 이 옵션은 소켓이 데이터를 보낼 때 데이터를 즉시 전송하는 것을 허용합니다.
- tcp_keepalive: TCP_KEEPALIVE 옵션을 활성화합니다. 이 옵션은 소켓이 연결이 끊어졌는지 확인하기 위해 주기적으로 패킷을 전송하는 것을 허용합니다.
서버가 소켓을 생성할 때 에러가 발생하는 경우를 대비하여 에러를 처리하는 방법은 다음과 같습니다.
- stream_socket_server 함수는 에러를 발생시키지 않습니다. 대신, 에러가 발생하면 errno 변수가 설정되고, errstr 변수가 에러 메시지를 포함하는 문자열이 됩니다. 예를 들어,
#hostingforum.kr
php
$server = stream_socket_server('localhost:8080', $errno, $errstr);
if ($errno) {
echo "에러 발생: $errstr ($errno)";
} else {
echo "소켓 생성 성공";
}
서버가 소켓을 닫을 때 에러가 발생하는 경우를 대비하여 에러를 처리하는 방법은 다음과 같습니다.
- 소켓을 닫을 때 에러가 발생하면 fclose 함수가 에러를 발생시키지 않습니다. 대신, fclose 함수는 성공적으로 소켓을 닫았는지 여부를 반환합니다. 예를 들어,
#hostingforum.kr
php
$server = stream_socket_server('localhost:8080');
$socket = stream_socket_accept($server);
fclose($socket);
fclose($server);
이러한 문제를 해결하기 위한 방법은 다음과 같습니다.
- 에러를 처리하기 위해 try-catch 블록을 사용할 수 있습니다. 예를 들어,
#hostingforum.kr
php
try {
$server = stream_socket_server('localhost:8080');
$socket = stream_socket_accept($server);
fclose($socket);
fclose($server);
} catch (Exception $e) {
echo "에러 발생: " . $e->getMessage();
}
- 에러를 처리하기 위해 errno 변수와 errstr 변수를 사용할 수 있습니다. 예를 들어,
#hostingforum.kr
php
$server = stream_socket_server('localhost:8080', $errno, $errstr);
if ($errno) {
echo "에러 발생: $errstr ($errno)";
} else {
$socket = stream_socket_accept($server);
fclose($socket);
fclose($server);
}
2025-03-28 19:11