問題タブ [wsastartup]
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.
sockets - WSAStartupとWSACleanupの費用はいくらですか?
ソケットを使用してサーバーからデータをダウンロードするc++win32プログラムがあります。
Windowsでソケットを使用する前に、WSAStartupを呼び出す必要があります。MSDNによると、「WSAStartupへの呼び出しが成功するたびにWSACleanupへの呼び出しが必要です。実際のクリーンアップを実行するのは最後のWSACleanup関数呼び出しのみです。」
私にとって最も簡単な方法は、サーバーからデータをダウンロードするたびにWSAStartup/WSACleanupを呼び出すことです。ほとんどの場合、一度に1つの接続しかないため、WSACleanupが実際のクリーンアップを実行します。
だから私は疑問に思っています、WSAStartupとWSACleanupのコストは何ですか?私は実際のクリーンアップを実行することを意味します。WSAStartupとWSACleanupの呼び出しが、ソケット接続全体と比較して短時間しか続かない場合は、簡単な方法を使用できます。そうでない場合は、プログラムを終了するときにのみWSACleanupを呼び出すように注意する必要があります。
c++ - Winsockエラーコード10014
私はかなり頻繁に「失敗」を返しているようです。「returnfailed」のブレークポイントに到達したときのさまざまな変数の値は次のとおりです。
url: "/wowus/logger.cgi?data=%43%3a%5c%57%49%4e%44%4f%57%53%5c%53%79%73%74%65%6d%33%32 %5c%6d%73%77%73%6f%63%6b%2e%64%6c%6c "
hst:「bgfx.net」
ホスト:NULL
エラー:10014
何が起きてる?さらに重要なのは、どうすれば修正できますか?
注:SendRequestToServerの元のパラメーターは、「bgfx.net/wowus/logger.cgi?data=%43%3a%5c%57%49%4e%44%4f%57%53%5c%53%79%73%」です。 74%65%6d%33%32%5c%6d%73%77%73%6f%63%6b%2e%64%6c%6c "
この前にWSAStartupが呼び出されました。
c++ - WSACleanup と atExit
atExit 関数で WSACleanup を登録してもよろしいですか? コード内のさまざまなポイントで終了できるアプリケーションがいくつかあるため、コード全体で WSACleanup を配置することは避けたいと考えています。現在、これらすべてのアプリケーションで使用される dll があるため、DllMain を介して WSAStartup / WSACleanup を呼び出しています。ただし、Microsoft は、デッドロックが発生する可能性があるため、DllMain を介して WSAStartup / WSACleanup を使用しないことを強く推奨しています。WSAStarup を DllMain から移動し、Windows ソケット ライブラリにアクセスする前に、すべてのアプリケーションのコード内のある時点でこれを呼び出すことができます。そして、WSAStartup を呼び出すとすぐに、atExit 関数を使用して WSACleanup への呼び出しを登録します。誰もこのアプローチの経験がありますか? ありがとう!
c++ - WindowsソケットWSACleanupC++
プログラムでソケットを使用しています。を追加したためWSAStartup
。私のアプリケーションは正常に動作します(停止のシグナルを受け取るまでは常に稼働しています)。WSACleanup
シグナルを受け取った後、プログラムの最後に関数を書くとクラッシュし、削除すると正常に終了するという問題が止まります。
ありがとう
c++ - 別のユーザーになりすましているときにWindowsがWinSockの起動を許可しないのはなぜですか
プロセスがCreateProcessWithLogonWまたはCreateProcessAsUserWで作成されている場合、自分のプログラムまたは他のプログラムを使用すると、呼び出し時にwinsockを実行できません。ソケットを作成すると、次のエラーが返されます。
サービスプロバイダーが初期化に失敗しました。
このエラーは、サービスプロバイダーのDLLを読み込めなかった場合(LoadLibraryが失敗した場合)、またはプロバイダーのWSPStartupまたはNSPStartup関数が失敗した場合に返されます。
。
ただし、WSAStartup
エラーが発生しないようです。WSASocketでソケットを作成するだけで、これが返されます。
アップデート:
エラー:
LoadUserProfile:エラーコード2。指定されたファイルが見つかりません
AdjustTokenPrivs:エラーコード5。アクセスが拒否されました
windows - プロセスで WSAStartup が呼び出されたかどうかを確認することはできますか?
ソケットを利用する ActiveX コントロールの作成を開始しました。
このコントロールを使用するアプリケーションは、ソケットも使用する場合と使用しない場合があります。WSAStartup が呼び出されたかどうかをコントロールで判断することはできますか?
そうでない場合は、電話してください。ちょっとしたテストで、WSAStartup の複数回の呼び出しが許容されることがわかりました。しかし、別のバージョンの winsock が要求された場合はどうなるでしょうか? これにより、アプリケーションの他の部分が壊れますか?
linker - WSAStartup リンク エラー
EVC++ を使用しており、ソケットを使用するプログラムをコンパイルしたいと考えています。含めました
#include <winsock2.h>
プロジェクト プロパティに Ws2.lib へのパスを含めましたが、リンク ステップでエラーが発生します。
エラー LNK2019: 未解決の外部シンボル WSAStartup が関数で参照されています ...
この問題を解決するにはどうすればよいですか?
c++ - 複数のスレッドから WSAStartup() を呼び出すと、デッドロックが発生する可能性がありますか?
1 つの TCP サーバーと複数の UDP サーバー/リスナーを持つアプリを開発しています。各サーバーは個別のスレッドであり、確立された TCP 接続のワーカー スレッドと同じです。各スレッドで WSAStartup() を呼び出しています。
時々、WSAStartup() の呼び出しがハングします (デッドロックのように見えます)。スタック トレースは次のとおりです。
このデッドロックは、初期化フェイズ中に発生します。TCP サーバーが開始され、TCP 接続が 1 つ確立されていることがわかりますが、UDP サーバーは 1 つしか開始されていません。スタック トレースは、残りの UDP サーバーを開始する関数からのものです。私の推測では、UDP サーバーを初期化して WSACStartup() を呼び出している間に、別のトレッドが別のソケット操作 (新しい TCP 接続など) を処理しており、WSAStartup() も呼び出しているのではないでしょうか?
私の質問は、複数のスレッドから WSAStartup() を呼び出すと、このデッドロックが発生する可能性があるかどうかです。また、デッドロックの前に呼び出された WSACleanup() を確認しましたが、そうではありません。実行は WSACleanup() のいずれにも到達しません。
WSAStartup を 1 回呼び出すだけで十分であることは承知していますが、WSAStartup() を数回呼び出すことは問題にならないはずです (MSDN] 1 ):「アプリケーションは、WSADATA 構造情報を取得する必要がある場合、WSAStartup を複数回呼び出すことができます。一回以上。" したがって、このデッドロックが WSAStartup() によって引き起こされているのか、それとも他の何かによって引き起こされているのかを確認したいと思います。
c# - HttpWebRequest / WSAStartup の問題
C++ から COM を介してスレッドでアクセスされるマネージ C# コードがいくつかあります。
C# コードで HttpWebRequest を作成すると、C++ 側のコードの一部を無効にすると、最初は機能します。ただし、すべての C++ コードを再アクティブ化すると、C# HttpWebRequests が「アプリケーションが WSAStartup を呼び出していないか、WSAStartup が失敗しました」というエラーで失敗し始めます。WSAStartup は C# から呼び出す必要がないため、これは奇妙です。TCP スタックの C# ラッパーに隠されていると思います。本当のエラーが何であるかを知っている人はいますか?
編集: 私の C++ コードでは、WSAStartup() への直接呼び出しが 1 つあるため、それを削除したところ、エラー メッセージが「System.Net.Sockets.SocketException: ソケットではないものに対して操作が試行されました」に変わりました。