例:setsockoptのoption_len引数の目的は何ですか?
// socket created above this
int iSocketOption = 1;
setsockopt(CFSocketGetNative(socket), SOL_SOCKET, SO_REUSEADDR, (void *)&iSocketOption, sizeof(iSocketOption));
私はあなたがoption_valueの引数(第4引数)のための1にint型のセットのアドレスにワイルドカードポインタを渡すとき、あなたが言っている、はい、SO_REUSEADDRオプションを使用することを理解しています。
しかし、最後の引数であるoption_lenでは何が起こっていますか?そのアイデアは、argの前に使用されているintをリサイクルして、無関係な値のサイズを報告するためのバッファにするように思われます。その無関係な価値は何ですか?私はそれで何かをしなければならないのでしょうか?最初にバッファのサイズを含むことoption_valueで指され、修正、)(getsockoptのため
、option_len値-結果パラメータである:ここで
は、BSDシステムからの抜粋が私を混乱の取扱説明書を呼び出します戻ったときに返される値の実際のサイズを示します。
setsockoptの最後から2番目の引数で渡されたバッファを使用してサイズを返す値は何ですか?
は(確かに、抜粋のgetsockoptについて、SETSOCKOPTないが、その最後の引数の他の説明はありません。)
私はこの質問をした理由:
プレスカンファレンスの詳細iPhone 3開発はこれを提供しますソケットの設定の例は、BOOL返すメソッドの内側 - WORこの方法の終わり
- (BOOL) methodInvolvingSocket {
// socket creation
int ret = 1;
setsockopt(CFSocketGetNative(socket), SOL_SOCKET, SO_REUSEADDR, (void *)&ret,
sizeof(ret));
//...socket address set up, but no further use of “ret.”
return ret;
}
を、リターンが「RET」を使用して行われますks、retは1であるから、これはYESと同等ですが、retの値が変わるという期待がなければ、かなり奇妙なことです。
そして、それは含まれている値を抽出できるように、そのparamの大きさを知る必要があります(SO_REUSEADDRの場合はyes/no)?その記憶を他のものに使うつもりはないのですか? iSocketOptionの価値を変えることはありませんか? – Wienke
@Wienke:Cでの関数呼び出しは、値渡しです。'int'値は最後の引数にコピーされます。 'setsockopt'は自由に独自のコピーを変更できますが、あなたの変数を変更することはできません。 –
@Peter:最後のargの値は、3番目のargが指すメモリのサイズです。したがって、関数が実際にそこに存在するものを変更できると仮定しています。 – Wienke