最近我的 Undertow 应用程序正在触发 Cloud Run 报告以下内容:
Container Sandbox Limitation: Unsupported syscall setsockopt(0x13,0x1,0xa,0x3e05747fe5a0,0x4,0xfc1abc10). Please, refer to https://gvisor.dev/c/linux/amd64/setsockopt for more information.
我已经完成了 strace,似乎 Undertow 正在发送启用带外内联 (SO_OOBINLINE) 的套接字选项。我已经明确告诉它不要在配置中这样做(两种方式),但它仍在发生。将 Undertow 与 Cloud Run 一起使用似乎是一个合理的用例,但如果没有更深入地了解 Undertow 的带外内联是什么以及 gVisor 不支持这一点的原因,我就无法确定哪个程序不合理。是 Undertow 做了其他网络服务器没有做的事情,还是 gVisor 太不成熟而无法处理这个特定的套接字功能?也许gVisor将来会支持它,我只需要等待吗?
def main(args: Array[String]): Unit = {
val server = Undertow.builder
.addHttpListener("8080", "0.0.0.0")
.setHandler(defaultHandler)
.setSocketOption[java.lang.Boolean](XnioOptions.TCP_OOB_INLINE, false)
.setWorkerOption[java.lang.Boolean](XnioOptions.TCP_OOB_INLINE, false)
.build
server.start()
}