1
我擁有一個簡單的偵聽套接字,即停止接受套接字,在僅有連接後退回EN_FILE
。 我在下述方式使用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))
}
}
「
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
}
注意
在accept()之後使用libtls(LibreSSL 2.5.5)。
EN_FILE是回來了,在那裏我個人希望EM_FILE
謝謝!今天又學到了一些東西,很快就會嘗試並接受你的回答。我認爲描述符和錯誤值都是負值。 –