//クライアントソケットの設定
client.sin_family = AF_INET;
client.sin_port = 0;
client.sin_addr.s_addr = INADDR_ANY;

//ソケットに名前をつける
err = bind(s, (struct sockaddr *)&client, sizeof(client));
if(err < 0) ERROR("client.bind");

//サーバ側ソケットの設定
server.sin_family = AF_INET;
server.sin_port = port;
server.sin_addr.s_addr = addr;

//サーバに対して結合する
err = connect(s, (struct sockaddr *)&server, sizeof(server));
if (err < 0) ERROR("client.connect");

//ユーザ関数(転送を行う)
err = function(s, server, client);
if(err < 0) ERROR("client.function");

これらの簡単な原理(説明)を教えてください・・