問題タブ [berkeley-sockets]

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.

0 投票する
2 に答える
1332 参照

tcp - バークレーソケットのシャットダウン機能、どれほど重要ですか?

背景として、IPを介してサードパーティのサーバーと通信する組み込みデバイスがあります。サードパーティサーバーのコードが変更される可能性はほとんどありません。最近のリリースでは、close()を呼び出す前にshutdown()を呼び出すようにipdisconnect関数を変更しました(以前はclose()を呼び出していました)。特定の割り込みが発生した場合、組み込みデバイスは通信セッションを完了せずに切断します。これがセッションの間違った時点で発生すると、サーバーはトレースファイルを生成しますが、これはさまざまな理由で顧客に受け入れられません。これは、shutdownが呼び出された場合にのみ発生し、サーバーはこれを送信失敗エラーとして扱い(そしてトレースファイルを生成し)、より突然のclose()をトレースを必要としないもう一方の端の切断エラーとして扱います。

したがって、明らかな解決策は、shutdownの呼び出しを停止することです。この質問でのBarnes氏の回答は、2つの機能を適切に説明していますが、特定のソケットに1つのプロセスしか接続されていないことがわかっている場合、閉じる前にシャットダウンを使用する理由はありますか?

ありがとう、パトリック

0 投票する
2 に答える
854 参照

api - Berkley ソケット (BSD) API をテストするには?

BSP API の実装の正確性と完全性をテストしたいと思います。テスト セットは、ARM sam7x 用にクロス コンパイルする必要があります。

0 投票する
5 に答える
2704 参照

c++ - C++ でバークレー ソケットを使用して DOS 攻撃を回避する方法

私は、Richard Stevens によるUNIX Network Programming Volume 1 に取り組んでおり、Telnet プロトコルを使用する TCP Echo クライアントを作成しようとしています。私はまだ初期段階にあり、読み書き機能を書き込もうとしています。

マルチクライアントである必要があり、Berkeley Sockets ライブラリを学習しようとしているときに C++ スレッドの学習に取り組みたくないため、I/O 多重化と Select 関数を使用するように記述したいと思います。同時に。I/O 多重化に関する章の最後に、Stevens は DOS 攻撃に関する小さなセクションを持っており、私が使用することを計画していた方法は、接続後に 1 バイトを送信するだけでハングする DOS 攻撃に対して脆弱であると述べています。その後、彼は 3 つの可能な解決策について言及しています。つまり、ノンブロッキング IO、スレッド化 (アウト)、および I/O 操作にタイムアウトを設定することです。

私の質問は、そのような攻撃を回避する他の方法はありますか? そうでない場合、これらのうちどれが最高ですか? 操作にタイムアウトを設定するセクションをざっと見ましたが、やりたいことのようには見えません。それを行うために彼が提案する方法はかなり複雑に見えます。私は NIO の章をちらりと見ただけで、今のところそれが進むべき道のように見えますが、この章をさらに数時間掘り下げる前に、これを回避する他の方法があるかどうかを確認したいと思います.

何か案は?

0 投票する
5 に答える
8029 参照

c - 独自のブロードキャストudpパケットを無視する方法

以下では、1枚のネットワークカードを想定しています。

サブネット内の他のユーザーにその存在を知らせるように設計されたプログラムのコンポーネントがあります。このために、プログラムが起動するたびに(そしてその後定期的に)ブロードキャストを送信するソリューションを実装しましINADDR_BROADCASTた。必要なポートでリッスンする人は誰でも、後で使用するためにどこから来たかを覚えています。

これの問題は、私が自分の放送を覚えたくないということです。理論的には、これは簡単に実行できると思いました。ローカルIPを見つけて、取得したものと比較するだけですrecvfrom

ただし、ローカルIPを取得するのは難しいことがわかりました。NULLの場合はをgetaddrinfo返し127.0.0.1getaddrinfoホスト名の場合はパブリックIPを返します。誰かが実際のサブネットIPを見つける方向に私を向けることができますか?私はここで非常に明白な何かを見逃しているに違いないと思いますが、まあ...私はまだそれを見逃しています:)

注:ブロードキャストに関する他のSOの質問、特にこれを読んだことがあります:すべてのインターフェイスでのUDP-ブロードキャストですが、マルチインターフェイスの問題についてはまだ理解していません。

0 投票する
4 に答える
10311 参照

c - ポインターの逆参照は、Berkeley ソケットを使用した厳密なアンチエイリアシング規則に違反します

addr が sockaddr* である、次のようなコードがあります。

これは、Berkeley ソケットを使用するための非常に典型的なコードだと思います。

ただし、これをコンパイルすると、次の警告が表示されます。
dereferencing pointer 'sin' does break strict anti-aliasing rules

オンラインで検索すると、私のやり方がかなり典型的であるという事実についての議論がいくつか見つかりますが、このコンパイラの警告もかなり現実的であり、良いことではありません。

警告を黙らせるだけでなく、警告を修正するためにこのコードをやり直す適切な方法は何ですか?

0 投票する
4 に答える
11314 参照

c++ - recv と読み取りバッファについて - C Berkeley Sockets

バークレー ソケットと TCP (SOCK_STREAM ソケット) を使用しています。

プロセスは次のとおりです。

  1. リモートアドレスに接続します。
  2. 私はそれにメッセージを送ります。
  3. そこからメッセージが届きます。

次のバッファを使用していると想像してください。

質問は次のとおりです。

  • recv を初めて呼び出した後、読み取りバッファーが空かどうかを知るにはどうすればよいですか? 空でない場合は、recv を再度呼び出す必要がありますが、空のときにそれを行うと、長時間ブロックされます。
  • recv_buffer に読み取ったバイト数を知るにはどうすればよいですか? 受信したメッセージに null バイトが含まれている可能性があるため、strlen を使用できません。

ありがとう。

0 投票する
3 に答える
14537 参照

c++ - 非常にシンプルなC++TCPエコーサーバー

私はC++ネットワークプログラミングに不慣れですが、Javaソケットなどの経験があります。

私はC++で単純なTCPエコーサーバーを作成しようとしていますが、実際には何の進歩もありません。http://cs.baylor.edu/~donahoo/practical/CSockets/practical/のようなコードを試してみましたが、何も機能しません。

TCPエコーサーバーのようなものを始めるための簡単なC++コードを誰かに教えてもらえますか?どうやって始めたらいいのかよくわかりません。

前もって感謝します。

0 投票する
2 に答える
3433 参照

sockets - POSIXの`recv`を「十分に速く」呼び出さないとどうなりますか?

TCP / IPストリームソケットサービスのクライアントが、データをバッファ(当然、アプリケーションバッファについて話している)に移動して操作するよりも速くデータをサービスに送信する可能性のあるシナリオを説明したいと思いますrecv

それで、基本的に、そのようなシナリオでは何が起こりますか?

明らかに、ユーザーアプリケーションである私のサービスの下にあるある種のサービスは、着信ストリームを受信し、「recv」を発行するまでどこかに保存する必要がありますよね?最も確かにオペレーティングシステム。

古い質問を再開したくありませんが、この一見明白な質問に対する答えが見つからないようです。

0 投票する
2 に答える
3197 参照

c++ - リモートアドレス/IP を取得 - C Berkeley Sockets

ソケット ファイル記述子を (接続またはバインドによって) 接続している場合、 と入力SOCK_STREAMすると、リモート アドレス/IP アドレスを取得できますか?

ソケットファイル記述子以外のデータがない関数内でこれを行う必要があります。

0 投票する
1 に答える
6018 参照

windows - Windows と Linux での bind() による「使用中のアドレス」の違い - errno=98

ポートをリッスンする小さな TCP サーバーがあります。デバッグ中は、プロセスを強制終了するためにサーバーを CTRL-C するのが一般的です。

Windows では、サービスをすばやく再起動でき、ソケットを再バインドできます。Linux では、bind() が成功するまで数分待たなければなりません

bind() が失敗すると、errno=98、使用中のアドレスが返されます。

実装の違いをよりよく理解したいと思います。Windows は確かに開発者にとってより友好的ですが、Linux が「間違ったこと」をしているとは思えません。

私の推測では、新しいソケットの作成を許可する前に、考えられるすべてのクライアントが古いソケットが壊れていることを検出するまで Linux が待機しているということです。これを行う唯一の方法は、タイムアウトするのを待つことです

Linux での開発中にこの動作を変更する方法はありますか? Windowsがこれを行う方法を複製したいと思っています