1

phpスクリプトで次のコードを使用して、http経由で受信データを処理し、別のモジュールに転送して応答を待ちます。次に、ソケットを閉じます。

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($sock,$host,$port) or die("<?xml version=\"1.0\"?>");
if (!socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) {  
echo socket_strerror(socket_last_error($sock));
exit;
}
$arrOpt = array('l_onoff' => 1, 'l_linger' => 1);
socket_set_block($sock);
socket_set_option($sock, SOL_SOCKET, SO_LINGER, $arrOpt);
$address = gethostbyname($host);

$msg = $url;
$len = strlen($msg);
socket_sendto($sock, $msg, $len, 0, $remotehost, $remoteport) ;
socket_recvfrom($sock, $buff, 1000, 0, $host, $newport);
socket_close($sock);

直面する問題は、応答が正しく受信され、socket_closeエラーも成功(socket_last_errorの出力)を返すことです。しかし、その後netstatを実行すると、ポートが使用されており、プロセス(/ proc / pid / statusの出力)がスリープ状態になっていることがわかります。この動作は本質的にランダムであり、AmazonEC2クラウドでPHPバージョン5.3.8を使用しています。

4

1 に答える 1