を使用しgetpeername
ます。あなたの問題はgetsockname
、ソケットの自分の(ローカル)側の情報を返すことだと思います。これはおそらく0.0.0.0にバインドされています(つまり、任意のインターフェイスからの接続を受け入れることができます)。
編集:私はあなたの実際のバグがコードを読んでいるのを見つけたと思います。この行は間違っています:
getsockname(stdin, &addr, sizeof(addr));
getsockname
andgetpeername
関数は、3番目の引数として(ポインター)を取り、。ではありsocklen_t *
ませんsize_t
。のプロトタイプにヘッダーを含めるのを忘れない限り、コンパイラはこの間違いについて通知するはずですgetsockname
。また、すでに述べたように、stdin
正しくありません。試す:
socklen_t len = sizeof addr;
getpeername(0, &addr, &len);
または(C99のみ):
getpeername(0, &addr, (socklen_t[1]){sizeof addr});
戻り値も確認する必要があります。そうした場合、エラーが返されていることがわかります。