listen()用に設定されたソケットがあります
通常、select()を介して準備ができているファイル記述子に基づいて、これらの接続をaccept()します。同じファイル記述子を使用して、これをaccept()ではなくrecv()に変更できますか?
listen()用に設定されたソケットがあります
通常、select()を介して準備ができているファイル記述子に基づいて、これらの接続をaccept()します。同じファイル記述子を使用して、これをaccept()ではなくrecv()に変更できますか?
いいえ、互換性はありません。
を使用して単一のファイル記述子のみをリッスンしていますが、クライアントを接続したら、接続ごとselect
にファイル記述子を作成する必要があります。
accept
リスニングソケットの保留中の接続のキューで最初の接続要求を抽出し、新しい接続されたソケットを作成し、そのソケットを参照する新しいファイル記述子を返します。
新しいファイル記述子を取得したら、recvを使用してその上のクライアントからデータを受信できます。
リッスンするように設定されたソケットは接続の受け入れにのみ使用され(データの送受信には使用されない)、accept()によって返されるファイル記述子はデータの送信に使用されることを理解するのに役立ちました。 1つの特定のクライアント(接続を行ったクライアント)に転送され、他のクライアントとの対話には使用されません(他のクライアントからの接続を受け入れる役割がないことを含む)。HTH。
いいえ。
recv(2)とread(2)は(ほとんど)交換可能であるため、混乱する可能性がありますが、acceptは完全に異なります。
accept()はペア(conn、address)を返します。ここで、connは接続でデータを送受信するために使用できる新しいソケットオブジェクトであり、addressは接続のもう一方の端のソケットにバインドされたアドレスです。
言い換えると、accept()は要求を処理するための新しいソケットを形成し(新しいポートを選択し)、この新しいソケットを使用してuはrecv()とsend()を呼び出すことができます。