2017-08-15 5 views
2

次のようにコード例は次のとおりです。ホストはTCPポート6666を聞く場合は、実際にはなぜ引数addrがIPアドレスを割り当てるdoes't時にホスト自体を接続)(接続

int sockfd = socket(AF_INET, SOCK_STREAM, 0); 
struct sockaddr_in addr; 
bzero(&addr, sizeof(addr)); 
addr.sin_family = AF_INET; 
addr.sin_port = htons(6666); 
int len = sizeof(addr); 
// connect but not assign the destination ip 
int ret = connect(sockfd, (struct sockaddr*)&addr, len); 
...... 

connect() Linuxでホスト自体を正常に接続します。

私の問題は、宛先IPが割り当てられていないときにconnect()の動作を定義するところです。少なくとも、私はマニュアルの定義を見つけることができません。

誰かが役に立ちますか?

+0

接続時に0.0.0.0が127.0.0.1と解釈されるようです。なぜ私に尋ねないでください。 – EJP

+0

接続するとサーバープログラムからデータを送受信できますか? – skr

+0

はい、サーバーにデータを送信し、サーバープログラムからデータを受信できます。 –

答えて

0
bzero(&addr, sizeof(addr)); 

これは0.0.0.0addr.sin_addr.s_addrを設定します。

0.0.0.0は有効なアドレス構文です。したがって、従来のドット区切り10進表記のIPアドレスが期待される場所であれば、有効なものとして解析する必要があります。解析され、実行可能な数値形式に変換されると、その値によって次に何が起こるかが決まります。

0.0.0.0にpingを送信して、何が起こっているかを確認できます。

+0

私は0.0.0.0をpingしようとしましたが、それは通常127.0.0.1からの応答を受け取ることができます。そしてあなたが指していたコードライン "bzero"がキーポイントです。それがなければ、ホストはランダムなサーバを選ぶかもしれませんし、サーバに大規模に接続することはできません。私は本当にあなたの助けに感謝します。 –

+0

私は助けることができてうれしい嬉しい問題です。 – skr

+0

@Remy Lebeau私はあなたの質問が重複していると信じていたという通知を受けました。あなたのフィードバックのためにありがとうございます。しかし、私は私の質問がどちらと重複しているのかわかりません。私は尋ねる前にGoogleで検索し、私は似たものを見つけることができないと確信しています。私がstackoverflowを使うのは初めてです。だから、重複した質問がどこにあるのか教えてください。ありがとうございました! –

関連する問題