アットウィキロゴ

ソフトウェア構成論(中島)

TOPへ

計算機ネットワーク

ソフトウェア構成論


shell

ls

cat

提出する説明


課題2メモ。

socket(int protocolfamily ,int type , intprotocol);

ソケットの作成。 失敗すると-1を返す

<int protocolfamily>

PF_UNIX ローカル通信
PF_INET IPv4 インターネット・プロトコル

<int type>

SOCK_STREAM 順序性と信頼性があり、双方向の、接続されたバイト・ストリーム(bytestream)を提供
SOCK_DGRAM

データグラム(接続、信頼性無し、固定最大長メッセージ)をサポート

SOCK_SEQPACKET 固定最大長のデータグラム転送パスに基づいた順序性、信頼性のある双方向の接続に基づいた通信を提供。受け取り側はそれぞれの読み出しシステム・コールごとにパケット全体を読み取ることを要求される。
SOCK_RAW 生のネットワーク・プロトコルへのアクセスを提供する
SOCK_RDM 信頼性はあるが、順序は保証しないデータグラム層を提供する

<int protocol>

IPPROTO_TCP プロトコルとしてTCPを使う
IPPROTO_UDP プロトコルとしてUDPを使う

int bind(int sockfd , struct sockaddr*myaddr , intaddrlen);

ソケットとポートの結合

<sockfd>

 socket()で作成したsocket番号を入れる。

<struct sockaddr *myaddr>

実際に使うのは sockaddr_in構造体で、sockaddr型にキャストして使用する。

構成は以下の通り。

struct sockaddr_in{
unsigned short sin_family;//procotolfamily
unsigned short sin_port;//ポート番号
struct in_addr sin_addr;//IPアドレス
}

protocolfamilyは、socket()におけるprotocolfamilyと同じと考える。

使用するポート番号を、TCP/IPネットワークにおけるバイトオーダーに変換するためにuint16_thtons(uint16_tx) という関数を使用する。

また、使用するIPアドレスもTCP/IPネットワークにおけるバイトオーダーに変換するためにuint32_thtonl(uint32_t x)という関数を使用する。

htons 16ビット値をホストのバイト順からネットワークのバイト順に変換(リトル円ディアンからビッグエンディアンへ)
htonl 32ビット値をホストのバイト順からネットワークのバイト順に変換(リトル円ディアンからビッグエンディアンへ)
uint16_t 16ビット符号なし整数
uint32_t 32ビット符号なし整数

構造体を使用する前には

memset(&srcAddr , 0 , sizeof(srcAddr));

のように初期化すると良い。


int listen(int sockfd ,int backlog);

この関数はconnection-orientedなserverで使われ、
connectionを受け取ろうとしていることを示す。
これは socketと bindの関数の後、 accept関数の前に履行される。
backlog引数はacceptされる前にいくつのconnectionのリクエストを
待ち行列にいれるかを指定する。
その最大値は5であり、普通5が取られる。


int accept(int sockfd, structsockaddr *peer, intaddrlen);

clientから実際のconnectionが行なわれたら、 accept関数によって処理される。
acceptは待ち行列にある最初のconnectionを取ってきて
sockfdと同じ性質のもう一つのsocketを作り出す。(newsockfdを返す。)
connection requests がないときは、ブロックされる。


int connect(int sockfd, structsockaddr *servaddr, intaddrlen);

client プロセスはconnect 関数が server と結合を
確立することによってsocketにconnectする。
sockfd は(client側の) socket 関数によって返されたsocketdescriptorである。



最終更新:2005年10月18日 17:23
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。