内核TLS选项启用时setsockopt失败

内核TLS选项启用时setsockopt失败,c,linux,ssl,kernel,C,Linux,Ssl,Kernel,我正在学习内核5.3版本(Fedora 30和31),但即使在启用ULP时也遇到了问题: //tls.c #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 int main(){ intsock=socket(AF_INET,sock_STREAM,0); 如果(sock==-1){ perror(“套接字创建”); 退出(退出失败); } if(setsockopt(sock、SOL_TCP、TCP_ULP、“tls”、sizeof(“tls”))=-1){ pe

我正在学习内核5.3版本(Fedora 30和31),但即使在启用ULP时也遇到了问题:

//tls.c
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main(){
intsock=socket(AF_INET,sock_STREAM,0);
如果(sock==-1){
perror(“套接字创建”);
退出(退出失败);
}
if(setsockopt(sock、SOL_TCP、TCP_ULP、“tls”、sizeof(“tls”))=-1){
perror(“tls初始”);
退出(退出失败);
}
关闭(袜子);
返回退出成功;
}
然后:

$cat/proc/sys/net/ipv4/tcp\u可用\u ulp
tls
$gcc tls.c-O0-g
$lsmod | grep tls
美元/年
tls init:没有这样的文件或目录
$lsmod | grep tls
$sudo./a.out
tls初始化:未知错误524
$lsmod | grep tls
tls 57344 0
美元/年
tls初始化:未知错误524
$ 
我不知道我错在哪里。它在文档中看起来非常简单:

创建TLS连接

首先创建一个新的TCP套接字并设置TLS ULP

sock = socket(AF_INET, SOCK_STREAM, 0);

setsockopt(sock, SOL_TCP, TCP_ULP, "tls", sizeof("tls"));
设置TLS ULP允许我们设置/获取TLS套接字选项。目前 内核中只处理对称加密。在TLS之后 握手完成后,我们已具备移动设备所需的所有参数 到内核的数据路径。有一个单独的移动插座选项 将发送和接收输入内核


我不明白如何启用内核TLS以及我做错了什么。

您的内核是使用内核TLS支持编译的吗?很明显524是EOP,谢谢@用户253751[user@localhost~]$cat/boot/config-5.3.13-300.fc31.x86_64 | grep-i config_TLS config_TLS=mThanks@jww我只是从文档中了解到:我认为这是tls模块的一个问题。也可以在红帽上看到bugzilla。对不起,我没有引用这个问题。我以为我做错了什么。事后看来,我认为你发现了一个问题。@jww谢谢!您的评论促使我在另一个发行版上检查此代码。Oracle8和4.18是可用的,但具有相同的行为:(您的内核是用内核TLS支持编译的吗?显然524是EOPNOTSUPP。谢谢!@user253751[user@localhost ~]$cat/boot/config-5.3.13-300.fc31.x86_64 | grep-i config_TLS config_TLS=mThanks!@jww我刚从文档中获取了它:我认为这是TLS模块的问题。也可以从Red Hat bugzilla中看到。很抱歉,我没有引用这个问题。我认为我做错了什么。事后看来,我认为你发现了一个问题。@jww谢谢!你的comment提示我在另一个发行版上检查此代码。Oracle 8 with 4.18可用,但行为相同:(