問題タブ [closesocket]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 一部のコンピューターでは、WinSock closesocket()の呼び出しに1秒かかります
この呼び出しは非常に短い時間の後に戻るはずですが、一部のマシンでは、不可解にも1秒近くかかります。誰かがこの問題を見たことがありますか。ループバックアドレスを使用しているので、ネットワークは見えないはずです。
sockets - recv()は0を返します
他のフォーラムで何度か見つけた非常に厄介な問題がありますが、適切な解決策を見つけることができません。問題は、recv()が接続の最後の数バイトで0を返すことです。ここにいくつかの背景情報があります。
- 両方の(クライアント/サーバー)アプリケーションは同じマシンで実行されます。
- 両方の(クライアント/サーバー)ソケットは非ブロッキングです
- 転送されるデータサイズは53バイトです。
- 最後のsend()/ recv()が実行されたときに、(クライアント/サーバー)の両方がshutdownとclosesocketを呼び出します。
- 私もSO_LINGERと10秒で試しましたが、成功しませんでした
send()を数回(小さなチャンク)呼び出し、クライアント側から53バイトが転送されます。サーバーはrecv()を数回呼び出し(4バイトの要求)、49バイトを読み取ってから、0を返します(54バイト-49バイト、したがって4バイトが欠落しています)。
MSDNといくつかのフォーラムは、非ブロッキングソケットについて次のように書いています。
- recv()はエラー時に間違いなく<0を返し、errno/WSAGetLastErrorが設定されます
- 反対側が接続を閉じたとき、recv()は間違いなく=0を返します
- データが読み取られたとき、recv()は間違いなく>0を返します
MSDNも言います:
SD_SENDまたはSD_BOTHでclosesocketまたはshutdown機能を使用すると、RELEASE信号が制御チャネルに送信されます。ATMは個別の信号チャネルとデータチャネルを使用しているため、最後のデータが宛先に到達する前にRELEASE信号がリモートエンドに到達し、そのデータが失われる可能性があります。考えられる解決策の1つは、最後に送信されたデータと、ATMソケットのclosesocketまたはshutdown関数呼び出しとの間に十分な遅延をプログラミングすることです。
これは、recv()とsend()の例で考慮されています:http://msdn.microsoft.com/en-us/library/windows/desktop/ms740121(v = vs.85).aspx
しかし、それでも成功しません。49バイトを受信した後、すべての接続の10%で割り込みが発生し、接続の90%が成功します。何か案は?どうも。
java - 開いているソケットと接続されているソケットの違いは何ですか?
JavaSocket
クラスには2つのメソッドがisClosed
ありisConnected
、ソケットが閉じているか接続されているかをそれぞれチェックします。開いているだけのTCPソケットと開いて接続されているTCPソケットの違いと、UDPとの違いを知りたいと思いました。
android - ソケット c-sharp は、Java の BufferedWriter.flush のように閉じたりシャットダウンしたりせずにデータを送信します
ソケットを閉じていない間はメッセージを受信できず、NetworkStream を使用しますが、ソケットが閉じていない間はデータを送信しません私のコード サーバー c#:
私のクライアントアンドロイド:
質問を読むのに疲れましたが、答えが見つかりません 助けてください
tcp - TCP close( ) は、すべてのデータが受信者に配信されることを保証しますか?
常に一方の端からデータを受信し、もう一方の端に送信する単純なプロキシ アプリケーションを実装しています。
このような場合、着信レグからすべてのデータを受信したことを確認したら、コールclose( )
せずに直接コールできshutdown( )
ますか? その場合close( )
、すべてのデータが発信レッグで宛先に配信され、宛先のアプリケーションによって受信されることを保証しますか?
または、そのような場合、クローズを開始する前にシャットダウンを開始することが必須ですか?
sockets - closesocket が WSAENETDOWN で失敗した場合はどうすればよいですか?
どうやら、closesocket
機能がWSAENETDOWN
「ネットワークサブシステムが失敗しました」で失敗するたびに。しかし、それは正確にはどういう意味ですか?それはいつ起こりますか?発生した場合、ソケット記述子はまだ閉じていますか? どのように処理すればよいですか?
私の最初の質問に関して、Windows Sockets Error CodesページにはWSAENETDOWN
、
ネットワークがダウンしています。
ソケット操作で、デッド ネットワークが検出されました。これは、ネットワーク システム (つまり、Windows ソケット DLL が実行されるプロトコル スタック)、ネットワーク インターフェイス、またはローカル ネットワーク自体の重大な障害を示している可能性があります。
しかし、それも私にはあまり役に立ちません。
POSIXは、 、、 、に対してENETDOWN
のみ指定されconnect
、に対しては指定されないことに注意してください。Winsock に対応するものは、よりユビキタスです。send
sendto
sendmsg
write
close