【发布时间】:2012-02-01 03:45:45
【问题描述】:
例子:
// socket created above this
int iSocketOption = 1;
setsockopt(CFSocketGetNative(socket), SOL_SOCKET, SO_REUSEADDR, (void *)&iSocketOption, sizeof(iSocketOption));
我了解,当您将通配符指针传递给 option_value arg(第 4 个参数)设置为 1 的 int 地址时,您的意思是,是的,使用 SO_REUSEADDR 选项。
但是最后一个参数 option_len 是怎么回事?这个想法似乎是回收它之前用于 arg 的 int,使其成为用于报告不相关值大小的缓冲区。那不相关的价值是什么?我应该用它做点什么吗?
这是 BSD 系统调用手册的摘录,让我感到困惑:
对于getsockopt(),option_len 是一个value-result 参数,最初包含option_value 指向的缓冲区的大小,并在返回时修改以指示返回值的实际大小。
使用通过 setsockopt 的倒数第二个参数传入的缓冲区返回其大小的值是多少?
(当然,摘录是关于getsockopt,而不是setsockopt,但对于最后一个参数没有其他解释。)
我为什么问这个问题:
Apress 的更多 iPhone 3 开发在一个返回 BOOL 的方法中给出了这个套接字设置示例:
- (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”进行返回——这是可行的,因为 ret 是 1,相当于 YES,但这是一件很奇怪的事情,除非有人期望“ ret”可能会改变。
【问题讨论】:
标签: c sockets core-foundation