web-dev-qa-db-ja.com

C ++ 11にはソケットがありますか?

新しいC++ 11にはソケットライブラリが含まれますか?何かをするためにstd::socket-Hは?

std::threadが追加されます。ソケットも追加する必要があるように感じます。 Cスタイルのソケットは苦痛です...彼らは非常に直感に反するように感じます。

とにかく:C++ 11にはC++ソケットがありますか(グーグルで検索しましたが、答えが見つかりませんでした)?そうでない場合、これを追加する予定はありますか?なぜ(/なぜそうではない)?

61
Touzen

いいえそうではありません。近い将来に関しては、C++標準委員会 ネットワーク層の提案を開発している研究グループを作成しました 。基本的なソケットレイヤーから始めて、その上にHTTP /などのサポートを構築するボトムアップアプローチを採用しているようです。 彼らは10月の委員会で基本的なソケット提案を提示しようとしている。

彼らがこれをC++ 11に入れなかった理由については、それは純粋に投機的です。


問題に関する私の意見が必要な場合は、この理由があります。

特定の機能を備えた何かを行うプログラムを作成している場合、2つの理由のいずれかでライブラリを選択できます。 1つの理由は、そのライブラリがコードを実装するために必要な必要なことを行うためです。そしてもう1つは、一般的なコードの実装に役立つhelpfulを行うためです。

特定のプログラムの設計で、「このアイテムのリストを保持するためにstd::vectorを絶対に使用しなければならない!」と言うことは非常に困難です。プログラムのdesignはそれほど具体的ではありません。 Webブラウザーを作成している場合、ブラウザーの概念は、タブをstd::vectorstd::list、またはユーザーが作成したオブジェクトに保持してもかまいません。現在、一部の設計では特定のデータ構造を強く提案できます。しかし、デザインがstd::listのような低レベルのものが完全に不可欠であると明示的に言うことはめったにありません。

std::listは、ほぼanyプログラムで使用できます。 std::vectorstd::dequeなども同様です。

ただし、Webブラウザーを作成している場合、そのデザイン内でボトル化されるのはnetworkingです。あなたはmustネットワークライブラリを使用するか、ネットワーク層を自分で記述します。これは、アイデアの基本的な要件です。

私が前者のタイプ、つまりあらゆるもので使用できるライブラリーに対して使用する用語は、「ユーティリティー」ライブラリーです。

スレッドはユーティリティライブラリです。設計では、ユーザーに応答する必要があるため、スレッド化が促進される場合がありますが、プリエンプティブなマルチスレッド化なしで応答する方法があります。したがって、ほとんどの場合、スレッド化は実装の選択肢です。したがって、スレッド化はユーティリティです。

ネットワーキングはnotです。設計で特に必要な場合にのみ、ネットワークを使用します。ネットワークをプログラムにダンプするだけではありません。実装の詳細ではありません。これは設計要件です。

私の意見では、標準のC/C++ライブラリはユーティリティのみを実装する必要があります。また、XMLパーサーなどのような他のヘビーウェイトアイデアに反対する理由でもあります。他のライブラリがこれらのものを持っていることは間違いありませんが、CおよびC++にとっては、これらは良い選択ではありません。

53
Nicol Bolas

他の多くの一般的な言語は、言語の一部としてソケット操作をサポートしているため、そうすべきだと思います(OS固有のAPIを使用することをユーザーに強制しません)。ローカルファイルの読み取り/書き込みを行うファイルストリームが既にある場合、ソケットを使用してデータを転送する方法がない理由がわかりません。

11
myeviltacos

C++ 11にはソケットはありません。スレッドとソケットの違いは、スレッドが順序についてより多くの保証を行うことを伴うことです。ifプログラムはスレッドを含みます。コアが1つだけのプラットフォームの場合、C++ 11はCPUに追加のコアを追加することを義務付けていません。一方、ソケットは、移植性のある実装が困難であり、ソケットを持たないシステムで正常に失敗します。

4
Puppy

C++ 0xにはありません。将来のバージョンでそれらを追加する提案があります。

C++ 0xの新しいものの量は、委員会にすべてを徹底的に処理する時間を与えるために制限する必要がありました。

1
Ben Voigt

C++ 0xのウィキペディアのページは通常かなり最新であり、 ライブラリの変更に関するセクション はソケットについて言及していないようです。

0
Andrew White