TCP/IPでのgetsockname()の使い方を教えてください
タイトル通りです。UNIX Solarisで環境はgccです。
クライアント側でクライアント自身のIPアドレスとポート番号が知りたいのですが
getsockname()を使うと意味不明のエラーが出ます:
(xxxxx) gcc -o tcpc TCPEchoClient.c dwe.c -lsocket -lnsl
Undefined first referenced
symbol in file
error /var/tmp//ccQLXX4R.o
ld: fatal: Symbol referencing errors. No output written to tcpc
collect2: ld returned 1 exit status
以下が関連しているだろう部分の抜粋です。
if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
DieWithError("socket() failed");
struct sockaddr_in sin;
int len;
// u_long local_ip;
unsigned long local_ip;
len = sizeof(sin);
if (getsockname(sock, (struct sockaddr *)&sin, &len) < 0){
error("getsockname failed.\n");
}
local_ip = ntohl(sin.sin_addr.s_addr);
printf("PORT %d,%d,%d,%d,%d,%d\n",
(int)(local_ip >> 24) & 0xff,
(int)(local_ip >> 16) & 0xff,
(int)(local_ip >> 8) & 0xff,
(int)(local_ip) & 0xff,
(ntohs(echoServAddr.sin_port) >> 8) & 0xff,
ntohs(echoServAddr.sin_port) & 0xff);
どこがおかしいか判りますか?
必要であれば全体のコードも補足します(そんなに長くないです)。
ちなみにここ↓を参考にしました。
http://www.coins.tsukuba.ac.jp/~syspro/2005/No8.html
お礼
>全銀TCP/IPと検索して、ヨソの会社がどういう製品を出しているのか調べるぐらいでしょうね。 そうですか・・・。 実際に触ってみないと、どういう物か分からないようですね。 有難うございます。
補足
その後、色々調べてみてなんとなく概要はつかめました。 結局、ホスト版とクライアント版の違いは、 クライアント版は発信側(電話をかける側)で、ホスト版は着信側(電話を受ける側)であるだけで、接続をしに行く側と接続を待つ側の違いはあるけれど、接続さえしてしまえばどちらからもデータの送受信は可能でした。 ご協力有難うございました。