@@ -512,6 +512,8 @@ static PHP_MINIT_FUNCTION(sockets)
512
512
#endif
513
513
#ifdef SO_ATTACH_REUSEPORT_CBPF
514
514
REGISTER_LONG_CONSTANT ("SO_ATTACH_REUSEPORT_CBPF" , SO_ATTACH_REUSEPORT_CBPF , CONST_CS | CONST_PERSISTENT );
515
+ REGISTER_LONG_CONSTANT ("SO_DETACH_FILTER" , SO_DETACH_FILTER , CONST_CS | CONST_PERSISTENT );
516
+ REGISTER_LONG_CONSTANT ("SO_DETACH_BPF" , SO_DETACH_BPF , CONST_CS | CONST_PERSISTENT );
515
517
#endif
516
518
REGISTER_LONG_CONSTANT ("SO_KEEPALIVE" , SO_KEEPALIVE , CONST_CS | CONST_PERSISTENT );
517
519
REGISTER_LONG_CONSTANT ("SO_DONTROUTE" , SO_DONTROUTE , CONST_CS | CONST_PERSISTENT );
@@ -2015,18 +2017,22 @@ PHP_FUNCTION(socket_set_option)
2015
2017
case SO_ATTACH_REUSEPORT_CBPF : {
2016
2018
convert_to_long (arg4 );
2017
2019
if (!Z_LVAL_P (arg4 )) {
2018
- RETURN_FALSE ;
2020
+ ov = 1 ;
2021
+ optlen = sizeof (ov );
2022
+ opt_ptr = & ov ;
2023
+ optname = SO_DETACH_BPF ;
2024
+ } else {
2025
+ static struct sock_filter cbpf [] = {
2026
+ BPF_STMT ((BPF_LD |BPF_W |BPF_ABS ), (uint32_t )(SKF_AD_OFF + SKF_AD_CPU )),
2027
+ BPF_STMT ((BPF_RET |BPF_A ), 0 ),
2028
+ };
2029
+ static struct sock_fprog bpfprog = {
2030
+ .len = (sizeof (cbpf ) / sizeof (cbpf [0 ])),
2031
+ .filter = cbpf ,
2032
+ };
2033
+ optlen = sizeof (bpfprog );
2034
+ opt_ptr = & bpfprog ;
2019
2035
}
2020
- static struct sock_filter cbpf [] = {
2021
- BPF_STMT ((BPF_LD |BPF_W |BPF_ABS ), (uint32_t )(SKF_AD_OFF + SKF_AD_CPU )),
2022
- BPF_STMT ((BPF_RET |BPF_A ), 0 ),
2023
- };
2024
- static struct sock_fprog bpfprog = {
2025
- .len = (sizeof (cbpf ) / sizeof (cbpf [0 ])),
2026
- .filter = cbpf ,
2027
- };
2028
- optlen = sizeof (bpfprog );
2029
- opt_ptr = & bpfprog ;
2030
2036
break ;
2031
2037
}
2032
2038
#endif
0 commit comments