シャットダウンとclosesocketの十分な理解でのpython!

シャットダウンとclosesocketを完全に理解!

シャットダウン和closesocket

    さあ、レッツ・徹底やシャットダウン機能を議論するために、分析(MSDN)までclosesocketから呼び出されます。接続ソケットたら、ソケットがクローズされなければならない、とすべてのリソースは、そのソケットハンドルによって占められて解放します。真にオープンなソケットハンドルのリソースが直接closesocket呼び出すことができますが、コールclosesocketはマイナスの影響、特定の効果や方法について呼び出すするを持っている可能性が理解するためにリリースした、最も明らかな影響は、データの損失であるため、一般的にソケットをクローズするclosesocket前にシャットダウンを起動します。
   シャットダウン:両側は、すべての通信データアプリケーションの問題を受け取ることを確実にするためには、実践が資格のアプリケーションがデータを送信することで、二重彼らの受け入れを通知されません!もはや、このソケット呼び出しを表現するために許可されている場合、これは「ノーマルクローズ」アプローチソケットと呼ばれ、この方法は、シャットダウン機能によってであるが、それに渡されたパラメータは、SD_SEND、SD_BOTHは3 SD_RECEIVE SD_RECEIVEされていません機能を受け入れます。これは、プロトコル層には影響しませんTCPソケットに加えて、データが到着を受け入れるか、または切迫したのを待っているかどうか、あなたは、UDPプロトコルのために、それはまだ入ってくるデータを受け入れ、配置した接続(注をリセットする必要があり、UDPソケットのシャットダウン無意味の場合)。あなたがSE_SENDを選択した場合、それはもはや送信機能を呼び出すことが許されないことを意味します。TCPソケット、この手段のためのすべてのデータが送信され、受信端の確認後に得られたFINパケットを生成すること。あなたがSD_BOTHを指定した場合、答えは自明です。
   closesocket:この呼び出しは、ソケット関数の説明、我々はすべて知っている(多くの場合、読みMSDNプログラマ)理由をリリースする予定このソケット呼び出しが失敗したとので、この関数を呼び出した後、それが起こるのだろう、通常に戻りエラーがWSAENOTSOCKです。このとき、リリースclosesocketリソースとデータ送信キューを破棄含め、ソケット記述子に関連付けられています!プロセス内の現在のスレッドのためにすべて閉じ操作の後ろに、懸念している、または重複する業務だけでなく、それに関連するすべてのイベントを保留している、または完了ルーチンポートコールは失敗しますの実装を完了するために!加算SO_LINGERフラグでも行動closesocketに影響しますが、伝統的なソケットプログラムのために、ここでの説明もなく
あなたは、切断のシャットダウンが合理的な整合性を持っていることがわかります。
    以下のプロトコルからClosesocketアップと行動分析のシャットダウン(振る舞い)TCP:(パラメータとして使用してSD_SEND)またはシャットダウンclosesocketは、FIN_WAIT_1 ESTABLISHEDソケットから状態のターン時に、フィン通信相手にパケットを送信します反対側が互いにFINを送信します閉じた接続でもある場合、もう一方の側は、ACKパケットの応答、ソケットにFIN_WAIT_2を送信し、我々はACKで応答し、ソケットがTIME_WAITに設定されています。あなたはTCPのclosesocketの動作を見ることができるように、シャットダウンが行わ同じである差は機能部である、シャットダウンは、データウィンドウは、データの送信キューが失われない確立、およびすべてのデータを破棄するように向こう見ずにclosesocketれるようになりますあなたがclosesocketに喜んでいるのであれば、最高のシャットダウン音の一部をシャットダウンを交換するが、非常に複雑なデータ交換ネットワークプロトコルのプログラムですることができます!

socket.shutdown使用量のパイソン

コードで直接見て

「」」
ソケット関数をシャットダウンする使用用途のシャットダウン
SHUT_RDWR:すなわち送信を使用しない、オフ読み取り/書き込み/ RECV /読み取り
SHUT_RD:RECV /読み込みを使用していない、すなわち、オフ読書
SHUT_WR:書き込みに近く、ある、センド/書き込みを使用していません
「」」
輸入ソケット

S = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM)
s.connect(( "localhost" を、50000))
s.sendall( "これはシャットダウンテストである" + "\ rを\ n" は)
s.send(「これはシャットダウンテストです」)
s.shutdown(socket.SHUT_RDWR)
印刷(socket.SHUT_RDWR)
印刷(socket.SHUT_RD)
印刷(socket.SHUT_WR)
S。CLOSE()

おすすめ

転載: www.cnblogs.com/leijiangtao/p/11957234.html