LINEスタンプ制作代行サービス・LINEスタンプの作り方!

お電話でのお問い合わせ:03-6869-8600

stampfactory大百科事典

ソケット (BSD)

ソケット()とは、BSD系UNIXを起源とするAPIであり、C言語によるアプリケーション開発でのプロセス間通信、特にコンピュータネットワークに関するライブラリを構成する。BSDソケット、バークレーソケットなどとも呼ばれる。1983年にリリースされたUNIXオペレーティングシステム(OS) 4.2BSD で初めて API として実装された。ネットワークの抽象化インタフェースとしてのデファクトスタンダードとなっている。伝統的なSocket APIはC言語を対象とするが、他のプログラミング言語でも類似のインタフェースを用意している事が多い。ソケットの代替となるAPIとして、STREAMSベースの Transport Layer Interface (TLI) がある。しかし、BSDソケットは比較にならないほど普及しており、数多くの実装が存在する。BSDソケットは、ホスト間の通信や1つのコンピュータ上のプロセス間の通信を可能とする。通信媒体としては様々な入出力機器やデバイスドライバを利用可能だが、その部分はオペレーティングシステムの実装に依存する。このインタフェース実装はTCP/IPを利用する場合にはほぼ必ず必要とされ、インターネットを支える基盤技術の一つとなっている。当初、カリフォルニア大学バークレー校でUNIX向けに開発された。最近の全てのオペレーティングシステムには間違いなくBSDソケットが何らかの形で実装されており、インターネットへの接続の標準インタフェースとなっている。プログラマの観点から見ると、ソケットインタフェースは3つのレベルでアクセス可能である。最も強力で基本的なレベルは RAW(生)ソケットレベルである。RAWソケットが可能とする通信制御の自由度を必要とするアプリケーションは稀であり、インターネット関連技術の開発でのみ使われるべきとされている。BSDソケットにはいくつかのヘッダファイルがある。TCP はコネクションの概念を提供する。TCPソケットを生成するには codice_6 関数で codice_7 または codice_8 と codice_9 を引数に指定する。単純なTCPサーバの設定は、以下のように行われる。C99 でのサーバー側のソースコード。TCPクライアントの設定は、以下のように行われる。C99 でのクライアント側のソースコード。上記のソースコードは gcc の場合 codice_45 をつけることによりコンパイル可能であるが、codice_46 を使用した場合は最初から定義されているので codice_47 はあっても無くてもどちらでも良い。codice_47 が無いと codice_49 が使えない。UDP はコネクションレスのプロトコルであり、パケットが必ず相手に届くことは保証されない。UDPパケットは順序通りに届くとは限らず、1つのパケットが複数個届くこともありうるし、全く届かないこともある。このようにほとんど何も保証されないため、UDP は TCP に比べてオーバヘッドが小さい。コネクションレスであるとは、2つのホスト間にコネクションやストリームといったものがなく、データが単に個々のパケット(datagram)として届けられることを意味している。UDP のアドレス空間、すなわちUDPポート番号は、TCPポートとは別物である。C99 でのサーバ側のソースコード。ポート番号 7654 で UDP サーバを開く。bind() は、ソケットとアドレス/ポートを結びつける。最後の無限ループは recvfrom() を使ってポート番号 7654 からのUDPパケットを受信する。引数は以下の通り。C99 でのクライアント側のソースコード。ポート 7654、アドレス 127.0.0.1 に "Hello World!" という内容の UDP パケットを送る。IP の場合は IP アドレス+ポート番号で接続先を指定するのに対して、UNIXドメインソケットの場合はファイルパスで指定する。codice_6 は通信の一方の終端を作成し、それを表すファイル記述子を返す。codice_6 には以下の3つの引数がある。エラーが発生すると -1 を返す。そうでない場合、新たに確保された記述子を表す整数を返す。codice_65 と codice_66 は名前やアドレスで指定されたインターネット上のホストを表す struct hostent というデータ構造へのポインタを返す。その中には、ネームサーバから得られた情報、/etc/hosts ファイルから得られた情報などが格納されている。ローカルにネームサーバが動作していない場合、/etc/hosts ファイルを参照する。以下の引数がある。エラーが発生するとNULLポインタを返し、h_errno を見れば詳しいエラーの原因(再試行すべきか否か)がわかる。そうでない場合、有効な struct hostent * が返される。codice_32 はコネクションの確立に成功すると 0 を返し、エラーが発生すると -1 を返す。コネクションレスのソケットの場合(User Datagram Protocol)、codice_32 は送受信の相手を指定するのに使われ、codice_25 と codice_26 をコネクションレスのソケットで使えるようになる。codice_11 はソケットにアドレスを設定する。codice_6 で生成された時点では、ソケットはアドレスファミリは指定されているが、アドレスは設定されていない。ソケットは、コネクションを受け付ける前にバインド(アドレス設定)される必要がある。以下の引数がある。成功すると 0 を返し、エラーが発生すると -1 を返す。codice_22 はバインドされたソケットでコネクション確立要求を待ち受ける。codice_9 または codice_57 の場合のみ有効。以下の引数がある。コネクションは codice_23 されるとデキューされる。成功すると 0 を返す。エラーが発生すると -1 を返す。codice_23 は、リモートホストからのコネクション確立要求を受け付ける。以下の引数がある。コネクションが確立された場合、それに対応したソケット記述子を返す。エラーが発生すると -1 を返す。BSDソケットは、ブロッキングとノンブロッキングという2つのモードを持つ。ブロッキング・ソケットは指定されたデータを全て送受信し終わるまで呼び出したライブラリ関数から戻ってこない。これは、ソケットで listen を続けたい場合に困ったことになる。プログラムは決して届かないデータを待って動けなくなる可能性がある。ブロッキングかノンブロッキングかを指定するには、codice_92 か codice_93 関数を使う。codice_6 で確保されたリソースは codice_29 を使うまで解放されない。これは、codice_32 が成功するまで再試行を繰り返すような実装で注意が必要となる。codice_6 を呼び出したら必ず対応する codice_29 を呼び出す必要がある。close を使うには をインクルードする必要がある。ソケットインタフェースの正当な標準定義は以下の POSIX 標準に含まれている。この標準に関する情報と現在進行の作業については、the Austin website にある。ソケットAPIのIPv6拡張は、RFC 3493 と RFC 3542 にある。

出典:wikipedia

LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。