>>1820 みみ > 各クライアントが順不同のタイミングで接続してきた場合、 > どのクライアントがどのソケットに接続しているのかを知るのには、 > どのような方法があるのでしょうか? http://X68000.startshop.co.jp/~68user/net/c-echo-2.html を見てください。 getpeername(sock, (struct sockaddr *)&peer_sin, &len) でソケットの接続先のアドレス (IP アドレス+ポート番号の 情報) が peer_sin に格納されます。 - IP アドレス … inet_ntoa(peer_sin.sin_addr) - ホスト名 … gethostbyaddr - ポート番号 … ntohs(peer_sin.sin_port) でそれぞれ取得できます。 そのページのサンプルの echo-server-select.c では、 accept したときに struct CLIENT_INFO という構造体に ホスト名・IP アドレス・ポート番号を格納し、その後 クライアントの情報が必要になったら struct CLIENT_INFO を 参照していますが、毎回ソケットに対して getpeername しても動作はします。 |