@@ -2028,61 +2028,62 @@ PHP_FUNCTION(socket_get_option)
2028
2028
}
2029
2029
#endif
2030
2030
2031
- /* sol_socket options and general case */
2032
- switch (optname ) {
2033
- case SO_LINGER :
2034
- optlen = sizeof (linger_val );
2031
+ if ( level == SOL_SOCKET ) {
2032
+ switch (optname ) {
2033
+ case SO_LINGER :
2034
+ optlen = sizeof (linger_val );
2035
2035
2036
- if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& linger_val , & optlen ) != 0 ) {
2037
- PHP_SOCKET_ERROR (php_sock , "unable to retrieve socket option" , errno );
2038
- RETURN_FALSE ;
2039
- }
2036
+ if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& linger_val , & optlen ) != 0 ) {
2037
+ PHP_SOCKET_ERROR (php_sock , "unable to retrieve socket option" , errno );
2038
+ RETURN_FALSE ;
2039
+ }
2040
2040
2041
- array_init (return_value );
2042
- add_assoc_long (return_value , "l_onoff" , linger_val .l_onoff );
2043
- add_assoc_long (return_value , "l_linger" , linger_val .l_linger );
2044
- break ;
2041
+ array_init (return_value );
2042
+ add_assoc_long (return_value , "l_onoff" , linger_val .l_onoff );
2043
+ add_assoc_long (return_value , "l_linger" , linger_val .l_linger );
2044
+ return ;
2045
2045
2046
- case SO_RCVTIMEO :
2047
- case SO_SNDTIMEO :
2046
+ case SO_RCVTIMEO :
2047
+ case SO_SNDTIMEO :
2048
2048
#ifndef PHP_WIN32
2049
- optlen = sizeof (tv );
2049
+ optlen = sizeof (tv );
2050
2050
2051
- if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& tv , & optlen ) != 0 ) {
2052
- PHP_SOCKET_ERROR (php_sock , "unable to retrieve socket option" , errno );
2053
- RETURN_FALSE ;
2054
- }
2051
+ if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& tv , & optlen ) != 0 ) {
2052
+ PHP_SOCKET_ERROR (php_sock , "unable to retrieve socket option" , errno );
2053
+ RETURN_FALSE ;
2054
+ }
2055
2055
#else
2056
- optlen = sizeof (int );
2056
+ optlen = sizeof (int );
2057
2057
2058
- if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& timeout , & optlen ) != 0 ) {
2059
- PHP_SOCKET_ERROR (php_sock , "unable to retrieve socket option" , errno );
2060
- RETURN_FALSE ;
2061
- }
2058
+ if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& timeout , & optlen ) != 0 ) {
2059
+ PHP_SOCKET_ERROR (php_sock , "unable to retrieve socket option" , errno );
2060
+ RETURN_FALSE ;
2061
+ }
2062
2062
2063
- tv .tv_sec = timeout ? timeout / 1000 : 0 ;
2064
- tv .tv_usec = timeout ? (timeout * 1000 ) % 1000000 : 0 ;
2063
+ tv .tv_sec = timeout ? timeout / 1000 : 0 ;
2064
+ tv .tv_usec = timeout ? (timeout * 1000 ) % 1000000 : 0 ;
2065
2065
#endif
2066
2066
2067
- array_init (return_value );
2067
+ array_init (return_value );
2068
2068
2069
- add_assoc_long (return_value , "sec" , tv .tv_sec );
2070
- add_assoc_long (return_value , "usec" , tv .tv_usec );
2071
- break ;
2069
+ add_assoc_long (return_value , "sec" , tv .tv_sec );
2070
+ add_assoc_long (return_value , "usec" , tv .tv_usec );
2071
+ return ;
2072
+ }
2073
+ }
2072
2074
2073
- default :
2074
- optlen = sizeof (other_val );
2075
+ optlen = sizeof (other_val );
2075
2076
2076
- if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& other_val , & optlen ) != 0 ) {
2077
- PHP_SOCKET_ERROR (php_sock , "unable to retrieve socket option" , errno );
2078
- RETURN_FALSE ;
2079
- }
2080
- if (optlen == 1 )
2081
- other_val = * ((unsigned char * )& other_val );
2077
+ if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& other_val , & optlen ) != 0 ) {
2078
+ PHP_SOCKET_ERROR (php_sock , "unable to retrieve socket option" , errno );
2079
+ RETURN_FALSE ;
2080
+ }
2082
2081
2083
- RETURN_LONG ( other_val );
2084
- break ;
2082
+ if ( optlen == 1 ) {
2083
+ other_val = * (( unsigned char * ) & other_val ) ;
2085
2084
}
2085
+
2086
+ RETURN_LONG (other_val );
2086
2087
}
2087
2088
/* }}} */
2088
2089
0 commit comments