2014-03-12 2 views
0

나는 UDP 소켓으로부터 정보를 얻을 필요가 있지만 실제로 얼마나 많은 응답을 받을지 모르겠다. 그래서 나는 몇 초를 기다린다. 주요 문제는 블록 socket_recvfrom과 모든 코드가 붙어 있다는 것입니다. 몇 초 기다렸다가 소켓을 멈추는 방법이 있습니까?socket_recvfrom을 사용하여 소켓 데이터를 읽는 방법?

내 코드 :

$end_time = time() + 2; 

while ($end_time > time()) { 
    socket_recvfrom($socket, $buffer, 2500, 0, $from, $port); 
    var_dump($buffer); 
} 
+2

http://www.php.net/manual/en/function. socket-recvfrom.php 플래그 섹션을보세요 ... –

답변

1

당신은 MSG_DONTWAIT 플래그를 사용하여 비 블로킹 모드 기능을 설정할 수 있습니다 :

$end_time = time() + 2; 

while ($end_time > time()) { 
    socket_recvfrom($socket, $buffer, 2500, 0, $from, $port, MSG_DONTWAIT); 
    var_dump($buffer); 
    // sleep 500ms to decrease cpu usage 
    usleep(500000); 
} 
관련 문제