라이브러리

[PHP] socket_listen - 소켓에서 연결을 수신합니다.




socket_listen란?


PHP의 socket_listen는 TCP 소켓을 생성하고 listen 모드로 설정하는 함수입니다. 이 함수를 사용하면 서버가 클라이언트의 연결 요청을 기다릴 수 있습니다.

socket_listen 함수의 매개변수


socket_listen 함수의 매개변수는 다음과 같습니다.

- `sock`: 소켓 핸들. 이 매개변수는 필수이며, 소켓을 생성하기 전에 socket_create 함수를 사용하여 생성해야 합니다.
- `backlog`: 연결 요청을 처리하기 위한 큐의 크기. 이 매개변수는 옵션이며, 기본값은 0입니다.

socket_listen 함수의 반환값


socket_listen 함수는 성공 시 0을 반환하고, 실패 시 FALSE를 반환합니다.

예제


다음 예제는 TCP 소켓을 생성하고 listen 모드로 설정하는 방법을 보여줍니다.

#hostingforum.kr
php

<?php



// TCP 소켓을 생성합니다.

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);



// 소켓을 listen 모드로 설정합니다.

if (!socket_listen($sock)) {

    echo "socket_listen 실패: " . socket_strerror(socket_last_error()) . "
";

    exit;

}



echo "소켓이 listen 모드로 설정되었습니다.
";



// 클라이언트의 연결 요청을 기다립니다.

while (true) {

    $client_sock = socket_accept($sock);

    if ($client_sock === false) {

        echo "socket_accept 실패: " . socket_strerror(socket_last_error()) . "
";

        continue;

    }



    echo "클라이언트가 연결되었습니다.
";



    // 클라이언트와 통신합니다.

    while (true) {

        $buf = socket_read($client_sock, 1024);

        if ($buf === false) {

            echo "socket_read 실패: " . socket_strerror(socket_last_error()) . "
";

            break;

        }



        echo "클라이언트가 보낸 메시지: $buf
";



        // 클라이언트에게 메시지를 보냅니다.

        $msg = "클라이언트에게 보낸 메시지";

        socket_write($client_sock, $msg, strlen($msg));

    }



    socket_close($client_sock);

}



socket_close($sock);



?>



소켓을 listen 모드로 설정하는 방법


1. TCP 소켓을 생성합니다.
2. 소켓을 listen 모드로 설정합니다.
3. 클라이언트의 연결 요청을 기다립니다.
4. 클라이언트와 통신합니다.

소켓을 listen 모드로 설정하는 예제


#hostingforum.kr
php

<?php



// TCP 소켓을 생성합니다.

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);



// 소켓을 listen 모드로 설정합니다.

if (!socket_listen($sock)) {

    echo "socket_listen 실패: " . socket_strerror(socket_last_error()) . "
";

    exit;

}



echo "소켓이 listen 모드로 설정되었습니다.
";



// 클라이언트의 연결 요청을 기다립니다.

while (true) {

    $client_sock = socket_accept($sock);

    if ($client_sock === false) {

        echo "socket_accept 실패: " . socket_strerror(socket_last_error()) . "
";

        continue;

    }



    echo "클라이언트가 연결되었습니다.
";



    // 클라이언트와 통신합니다.

    while (true) {

        $buf = socket_read($client_sock, 1024);

        if ($buf === false) {

            echo "socket_read 실패: " . socket_strerror(socket_last_error()) . "
";

            break;

        }



        echo "클라이언트가 보낸 메시지: $buf
";



        // 클라이언트에게 메시지를 보냅니다.

        $msg = "클라이언트에게 보낸 메시지";

        socket_write($client_sock, $msg, strlen($msg));

    }



    socket_close($client_sock);

}



socket_close($sock);



?>



소켓을 listen 모드로 설정하는 방법에 대한 참고 자료


- [PHP Manual - socket_listen](https://www.php.net/manual/en/function.socket-listen.php)
- [PHP Manual - socket_accept](https://www.php.net/manual/en/function.socket-accept.php)
- [PHP Manual - socket_read](https://www.php.net/manual/en/function.socket-read.php)
- [PHP Manual - socket_write](https://www.php.net/manual/en/function.socket-write.php)
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 전체 8,985건 / 180 페이지

검색

게시물 검색