gpt4 book ai didi

Swift setsockopt SOL_SOCKET SO_RCVTIMEO 获取无效参数

转载 作者:行者123 更新时间:2023-11-28 09:00:31 29 4
gpt4 key购买 nike

下面的 playground 演示了这个问题。

    //: Playground - noun: a place where people can play
import Foundation
var s = socket(AF_INET, SOCK_STREAM, 0)
var tv = timeval()
tv.tv_sec = 3
tv.tv_usec = 100000
let tvSize = socklen_t(sizeof(timeval))
setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &tv, tvSize)
NSError(domain: NSPOSIXErrorDomain, code: Int(errno), userInfo: nil)

结果是setsockopt()得到-1并且NSError返回EINVAL

    Error Domain=NSPOSIXErrorDomain Code=22 "Invalid argument"

这是 Mac OS X 10.11,xcode 版本 7.0 beta 5 (7A176x)

任何帮助将不胜感激。

最佳答案

楼主在苹果论坛问了同样的问题,苹果工程师responded with details .

解决方案的要点是,要与 C API 互操作,您通常需要使用 strideof(T),它以与 C 的 sizeof() 相同的方式考虑尾部结构填充 运算符。更常用的 sizeofValue() 不会这样做。

sizeofValue(timeval)strideof(timeval) 的 32 位机型(即 iPhone 5 及以上)上运行时,此问题不会自行显现都是 8。

在 64 位模型上,相应的大小为 12 和 16,导致操作系统在传递 12 而不是预期的 16 时提示 EINVAL

关于Swift setsockopt SOL_SOCKET SO_RCVTIMEO 获取无效参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32107695/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com