sun's longitude:258 22 29.70 
· 자유게시판 · 묻고답하기 · 알파문서 · RPMS list
· 사용자문서 · 팁/FAQ모음 · 리눅스Links · 자료실
· 서버정보 · 운영자 · Books/FAQ · FreeBSD
/board/read.php:소스보기  

질문과 답변 게시판입니다.

현재 실시간으로 이곳 서버의 설정파일(몇개)를 보여주고 있습니다.
서버의 설정내용에 관한 질문은 먼저 이곳 서버의 설정내용을 참고하시길 바랍니다.

[*** 쓰기 금지단어 패턴 ***]
글 본문 중간에 업로드할 이미지를 추가하는 방법 : @@이미지이름@@
ex) @@foo.gif@@
2860 번 글: 이런거 아시는지..
글쓴이: 김성민 글쓴날: 2010년 06월 15일 12:32:13 화(오후) 조회: 1791

php 로 소켓서버 하는 소스인데요.. --> server.php

#!/usr/local/bin/php -q
<?
set_time_limit(0);

define("_IP",    "111.222.333.12");
define("_PORT",  "8888");

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

socket_bind($sSock, _IP, _PORT);
socket_listen($sSock);

pcntl_signal(SIGCHLD, SIG_IGN); 

while($sock = socket_accept($sSock))
{
    socket_getpeername($sock, $sockIp, $sockPort);
    msg("client connect :
".$sockIp.":".$sockPort."\n");

    $pid = pcntl_fork();
    msg("fork\n");
    if($pid == -1)
    {
        msg("fork failed\n");
        exit;
    // 자식 프로세스 일때 
    }if($pid == 0)
    {
        while(1)
        {
            $buf = socket_read($sock, 4096);

            // 접속 종료
            if(!$buf)
            {
                msg("client connection broken :
".$sockIp.":".$sockPort."\n");
                exit;
            }
            // 메시지 수신 이벤트
            else
            {
                msg("recive data : ".$buf."\n");
                $cmd = substr($buf, 0, 4);
                switch($cmd)
                {
                    // 시간전송
                    case "time":
                        msg("client(".$sockPort.") time data
request\n");
                        socket_write($sock, date("Y/m/d H:i:s"));
                        break;

                    // 종료
                    case "quit":
                        msg("client(".$sockPort.") quit
request\n");
                        socket_write($sock, "quit");
                        socket_close($sock);
                        exit;
                        break;
                    default:
                        msg("client(".$sockPort.") invalid command
$cmd\n");
                        break;
                }
            }
        }
    }
}

function msg($msg)
{
    echo "SERVER >> ".$msg;
}
?>            


이게 해보니 되기는 하는데, 클라이언트가 server.php 실행되고
있는 서버에 8888 포트로 최초 접속하고 아무입력 없이 가만히
있으면 server.php 에서도 자식프로세스가
 무한정 살아있는 상태라는것과, $cmd 에 해당하는 클라이언트->
서버. 로 어떠한 메시지를 던지고 나서 아무것도 안하고 있으면
마찬가지로 무한정 대기 상태라는 문제가 있는데요..

처음접속시나 접속후, 어떠한 메시지를 던지로 나서 아무것도
안하고 00초 있으면 클라이언트 연결이 자동으로 끊어지도록
하는걸 해보려고 하는데 도무지 안되서요..

혹. 이 부분에 대해 처리방법을 아시는지 해서 문의드립니다..


 
이전글 : Re: 하나만 더 여쭙겠습니다.
다음글 : Re: 이런거 아시는지..  
 from 211.171.229.3
JS(Redhands)Board 0.4 +@

Re: 하나만 더 여쭙겠습니다. Re: 이런거 아시는지..
인쇄용 


apache lighttpd linuxchannel.net 
Copyright 1997-2024. linuxchannel.net. All rights reserved.

Page loading: 0.01(server) + (network) + (browser) seconds