2011-12-28 27 views
-1

Cソースコードを読むとき、私はsocket関数が接続を開くために使用されるのを見ます。 Linuxカーネルのソースコード(バージョン3以上)のsocketの定義をgrepで検索すると、socketには多くの呼び出しがありますが、定義はありません。ソケット関数定義?

socketはどこですか?それはイーサネットカードのソースコードで定義されていますか?

+4

*「あなたの答えは、ほとんどの学生が私の会社のソフトウェアを通じて接続の確立を理解するのに役立ちます。 –

+0

なぜ関数の定義を見る必要がありますか? –

+2

私はあなたの意図にも疑問を呈していますが、ここでは、Googleを使うことができない人より深く深くなるリンクがあります:http://www.skyfree.org/linux/kernel_network/socket.html –

答えて

1

socket()関数はカーネル関数ではありません。libcです。

socket()内部を調べる場合は、glibc(または標準Cライブラリの実装)のコードを取得し、カーネルコードは取得しないでください。

さらに深く、カーネルがソケットメカニズムをどのように実装しているかを調べる場合は、システムコールsys_socketcall()を調べてください。

+1

これはまったく真実ではありません - socket()はlibcではなくカーネル呼び出しです。マニュアルページはセクション3(libc)ではなくセクション2(カーネル)にあり、動作はCライブラリではなくカーネルで定義されていますカーネルコードには、どこを探しているのかが分かります。 libcには、それを呼び出すために必要なプラットフォーム固有のシステムコールメカニズムと、奇妙に構成されたシステム用のトラップを実装するコードがいくつかあります。 –