오늘은 대한입니다.
sun's longitude:299 44 13.14 
· 자유게시판 · 묻고답하기 · 알파문서 · RPMS list
· 사용자문서 · 팁/FAQ모음 · 리눅스Links · 자료실
· 서버정보 · 운영자 · Books/FAQ · FreeBSD
/board/read.php:소스보기  
알파문서
자주 잊어먹거나, 메모해 둘 필요성이 있는 팁이나 문서, 기타 등등
[*** 쓰기 금지단어 패턴 ***]
글 본문 중간에 업로드할 이미지를 추가하는 방법 : @@이미지이름@@
ex) @@foo.gif@@
228 번 글: [php] socket 함수 예제
글쓴이: 산이 [홈페이지] 글쓴날: 2009년 12월 01일 10:00:19 화(오전) 조회: 8211
소켓 함수 예제

<?php
function __mksock()
{
  static $bsize = 1048576; // socket send/receive buffer size(Bytes)
  static $timeout = array('sec'=>0,'usec'=>500000);

  ## make socket
  if(!$sock  = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))
  {
    error_log("ERROR: unable to socket_create(): ".__FILE__,0);
    return;
  }

  @socket_set_option($sock,SOL_SOCKET,SO_SNDBUF,$bsize);
  @socket_set_option($sock,SOL_SOCKET,SO_RCVBUF,$bsize);
  @socket_set_option($sock,SOL_SOCKET,SO_RCVTIMEO,$timeout); // good idea for
blocking mode
  @socket_set_option($sock,SOL_SOCKET,SO_SNDTIMEO,$timeout);
  @socket_set_option($sock,SOL_SOCKET,SO_REUSEADDR,1); // add 2009.01.24
  @socket_set_option($sock,SOL_SOCKET,SO_KEEPALIVE,1); // add 2009.01.24
  //@socket_set_option($sock,SOL_SOCKET,SO_DEBUG,1); // add 2009.01.24
  //@socket_set_option($sock,SOL_SOCKET,SO_OOBINLINE,1); // add 2009.01.26
  @socket_set_nonblock($sock); // set to non-blocking mode

  return $sock;
}

function __socket_connect(&$sock, $server, $port)
{
  $_time = time();
  while(1)
  {
	@socket_connect($sock,$server,$port); // 114 Operation already in progress
	$s = @socket_last_error($sock);
	if($s==56 || $s==106) { return TRUE; break; }
	else if((time()-$_time) >= 3)
	{
		error_log("ERROR: timeout, unable to socket_connect($sock,$server,$port):
".__FILE__,0);
		return; break;
	}
  }

  return;
}

function __socket_request(&$sock, $req)
{
  return @socket_write($sock,$req);
}

function __socket_read(&$sock, $timeout=10)
{
  static $bsize = 1048576;

  $_time = time();
  $stream = array($sock);
  while(@socket_select($stream,$write=NULL,$except=NULL,0,500000) !== FALSE)
  {
	if($timeout && (time()-$_time > $timeout))
	{
		return $rbuf;
		break;
	}
	while($buf = @socket_read($sock,$bsize,PHP_BINARY_READ))
	{
		if(!trim($obuf.$buf))
		{
			//@socket_read($sock,$bsize,PHP_NORMAL_READ); // seek 1 bytes
			break; // end of header
		}
		$rbuf .= $buf;  $obuf = $buf;
	}
	break; // require
  }
  unset($stream,$buf);

  return $rbuf;
}

?>

 
이전글 : [linux] CentOS 5.x init.d 불필요한 서비스데몬
다음글 : [css] visibility:hidden vs display:none  
 from 114.111.62.248
JS(Redhands)Board 0.4 +@

|글쓰기| |답장쓰기| |수정| |삭제|
|이전글| |다음글| |목록보기|
인쇄용 

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

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