2017-06-30 10 views
0

私はどのステージの送信元ポートが割り当てられていますか?

sockfd = socket(AF_INET, SOCK_DGRAM, 0); 

でソケットを開くには、ソケットの送信元ポートが割り当てられているどのような段階では

bzero((char *) &serveraddr, sizeof(serveraddr)); 
serveraddr.sin_family = AF_INET; 
bcopy((char *)server->h_addr, 
    (char *)&serveraddr.sin_addr.s_addr, server->h_length); 
serveraddr.sin_port = htons(portno); 

sendto(sockfd, buf, strlen(buf), 0, &serveraddr, serverlen); 

でパケットを送信しますか? socket()またはsendto()にありますか?

sendto()のすべてのコールで送信元ポートは変更されませんか?

+0

'bzero()'を呼び出すと、 'serveraddr'のすべてが0x00に設定されます。したがって、 'bcopy()'を呼び出すと、すべて0x00のフィールドがソーシングされます。そして、あなたは 'server-> h_length'という値をどこで得ていますか?したがって、投稿されたコードはナンセンスです。データ宣言などを含むコードを投稿してください – user3629249

答えて

2

sendto()は、bind()を明示的に呼び出さないと暗黙のバインドを実行します。

+0

どのような標準はそれを提供していますか? – MOHAMED

+0

「sendto」はソケットがまだ何かに束縛されていないとスタックが判断できる唯一の最新の場所です。 'socket'の暗黙のバインドはあまり意味がありません。プログラムの後の明示的なバインディングがある可能性があり、' socket'はクリスタルボールがありません。 – tofro

+0

bind()を呼び出さないと、INADDR_ANYとしてバインドされます。 – mattn

関連する問題