@@ -627,6 +627,9 @@ static PHP_MINIT_FUNCTION(sockets)
627
627
REGISTER_LONG_CONSTANT ("SKF_AD_MAX" , SKF_AD_MAX , CONST_CS | CONST_PERSISTENT );
628
628
#endif
629
629
630
+ #ifdef TCP_CONGESTION
631
+ REGISTER_LONG_CONSTANT ("TCP_CONGESTION" , TCP_CONGESTION , CONST_CS | CONST_PERSISTENT );
632
+ #endif
630
633
#ifdef TCP_NODELAY
631
634
REGISTER_LONG_CONSTANT ("TCP_NODELAY" , TCP_NODELAY , CONST_CS | CONST_PERSISTENT );
632
635
#endif
@@ -1883,6 +1886,26 @@ PHP_FUNCTION(socket_get_option)
1883
1886
}
1884
1887
#endif
1885
1888
1889
+ if (level == IPPROTO_TCP ) {
1890
+ switch (optname ) {
1891
+ #ifdef TCP_CONGESTION
1892
+ case TCP_CONGESTION : {
1893
+ char name [16 ];
1894
+ optlen = sizeof (name );
1895
+ if (getsockopt (php_sock -> bsd_socket , level , optname , name , & optlen ) != 0 ) {
1896
+ PHP_SOCKET_ERROR (php_sock , "Unable to retrieve socket option" , errno );
1897
+ RETURN_FALSE ;
1898
+ } else {
1899
+ array_init (return_value );
1900
+
1901
+ add_assoc_string (return_value , "name" , name );
1902
+ return ;
1903
+ }
1904
+ }
1905
+ #endif
1906
+ }
1907
+ }
1908
+
1886
1909
if (level == SOL_SOCKET ) {
1887
1910
switch (optname ) {
1888
1911
case SO_LINGER :
@@ -2040,6 +2063,28 @@ PHP_FUNCTION(socket_set_option)
2040
2063
}
2041
2064
#endif
2042
2065
2066
+ if (level == IPPROTO_TCP ) {
2067
+ switch (optname ) {
2068
+ #ifdef TCP_CONGESTION
2069
+ case TCP_CONGESTION : {
2070
+ if (Z_TYPE_P (arg4 ) == IS_STRING ) {
2071
+ opt_ptr = Z_STRVAL_P (arg4 );
2072
+ optlen = Z_STRLEN_P (arg4 );
2073
+ } else {
2074
+ opt_ptr = "" ;
2075
+ optlen = 0 ;
2076
+ }
2077
+ if (setsockopt (php_sock -> bsd_socket , level , optname , opt_ptr , optlen ) != 0 ) {
2078
+ PHP_SOCKET_ERROR (php_sock , "Unable to set socket option" , errno );
2079
+ RETURN_FALSE ;
2080
+ }
2081
+
2082
+ RETURN_TRUE ;
2083
+ }
2084
+ #endif
2085
+ }
2086
+ }
2087
+
2043
2088
switch (optname ) {
2044
2089
case SO_LINGER : {
2045
2090
const char l_onoff_key [] = "l_onoff" ;
0 commit comments