3

ソケットプログラミングを使用して、Linux (クライアントおよびサーバー) でアプリケーションを作成しています。サーバー アプリケーションが相手側の最初の SYN パケットに応答しないというシナリオに遭遇しました。

私はまだ問題をデバッグしています。

私のサーバーはポートでリッスンしているため、accept イベントは生成されません。TCP ハンドシェイクが完了した後に受け入れイベントが生成されますか、それとも最初の SYN パケットが受信されたときに受け入れイベントが生成されますか?

いくつかの便利なリンクが役立ちます。

一番

4

3 に答える 3

6

TCP ハンドシェイクが完了した後に受け入れイベントが生成されるか

はい。

または、最初の SYN パケットが受信されたときに受け入れイベントが生成されますか?

いいえ、握手はすでに行われています。accept()すでに受け入れられている接続のキューからソケットを配信するだけです。キューが空の間、ブロックします。

これは、サーバーが を一度も呼び出していなくても、クライアントは接続できることを意味しますaccept()

于 2013-08-26T22:34:11.510 に答える
2

Accept() は正確にはイベントではありませんが、TCP ハンドシェイクのサーバー側ロジックをカプセル化する関数です。関数は事前に呼び出され(クライアント接続を待機)、ハンドシェイクが終了した後(クライアントから ACK を受信)に戻ります。

詳細な説明はこちら: http://lwn.net/Articles/508865/ http://www.ibm.com/developerworks/aix/library/au-tcpsystemcalls/

どのようなエラーが表示されますか? サーバーがクライアントから到達可能であることを確認してください。

于 2013-08-26T20:12:21.807 に答える