Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 侦听套接字最大连接数提前命中,同时增加了限制_Swift_Macos_Sockets_Unix_Posix - Fatal编程技术网

Swift 侦听套接字最大连接数提前命中,同时增加了限制

Swift 侦听套接字最大连接数提前命中,同时增加了限制,swift,macos,sockets,unix,posix,Swift,Macos,Sockets,Unix,Posix,我有一个简单的监听套接字,它停止接受套接字,只在13连接后重新发送EN_文件。 我已尝试以以下方式使用sysctl: $ sysctl kern.maxfiles kern.maxfiles: 12288 $ sysctl kern.maxfilesperproc kern.maxfilesperproc: 10240 $ sudo sysctl -w kern.maxfiles=1048600 kern.maxfiles: 12288 -> 1048600 $ sudo sysctl -

我有一个简单的监听套接字,它停止接受套接字,只在13连接后重新发送
EN_文件。
我已尝试以以下方式使用sysctl:

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576
但这似乎并不能解决问题,OSX上是否特别需要重新启动?我需要它来做一个单独的测试,所以我不打算在/etc/sysctl.conf中将它永久化

套接字创建:

 #if os(Linux)
            fileDescriptor = Glibc.socket(AF_INET, Int32(SOCK_STREAM.rawValue), 0)
        #else
            fileDescriptor = Darwin.socket(AF_INET, SOCK_STREAM, 0)
        #endif
以及接受部分:

let result = withUnsafePointer(to: &address) {
            $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { sockAddress in
                // Do nothing
                bind(fileDescriptor, sockAddress, UInt32(MemoryLayout<sockaddr_in>.size))
            }
        }
注释

libtls(LibreSSL 2.5.5)在accept()之后使用


EN_FILE是返回的值,在这里我个人希望EM_FILE

您将接受的文件描述符与错误代码进行比较。那没有道理。由于文件描述符和错误代码都是典型的小整数,当然最终会得到一个“匹配”


您想将
clientFD
与-1进行比较,然后对照
EMFILE
ENFILE
检查
errno
,谢谢!今天又学到了一些东西,我会很快尝试并接受你的答案。我认为描述符和错误值都是负数。
let clientFD = accept(fileDescriptor, nil, nil)
        if( clientFD == EMFILE || clientFD == ENFILE ) {
            print("[\(type(of: self))] WARNING: Maximum number of open connections has been reached")
            close(clientFD)
            return nil
        }