2016-07-15 13 views
0

私はいくつかの着信接続要求を破るソケットサーバーを持っています(default_socket_timeoutは10秒ですが、stream_socket_accept()でこれらの要求を正確に1分間停止します)。ソケット接続を受け入れる前にIPを要求するのは熱くなっていますか?

stream_socket_accept()を実行する前にクライアントのIPアドレスを取得する方法はありますか?

誰かがサーバー上の指定されたポートにpingを実行すると、深いレベルで何が起こっているのかを把握できるサーバーログがありますか?

おそらく私はこの問題を追跡することができます。

答えて

1

接続を受け入れる前にリモートIPアドレスを取得することはできません。代わりにファイアウォールを使用する必要があります。

stream_socket_acceptの後にstream_socket_get_name(socket、true)を使用するか、stream_socket_acceptの3パラメータバージョンを使用してタイムアウトを設定し、リモートIPを返すことができます。

+0

本当ですか?まだ私はまだstream_socket_acceptを呼び出していないので、私はstream_socket_getと呼ぶことができるソケットを持っていないのですか? –

+0

実際には、接続を確立する前にリモートIPアドレスを取得することはできません。必要な場合は、ファイアウォールを使用する必要があります。参照:[link](http://stackoverflow.com/questions/6418603/linux-tcp-server-reading-clients-ip-address-before-accepting-connection) –

+0

@ArminHierstetterまたはあなたはかなりTCPスタックを必要とします... stream_socket_accept()は、呼び出し側のプログラムのソケットにファイル記述子を作成し、バックログから削除します。実際のSYN/ACK送信は_accept()_ syscallの前にカーネルで透過的に行われます。 – bwoebi

関連する問題