@@ -1727,61 +1727,62 @@ PHP_FUNCTION(socket_get_option)
1727
1727
}
1728
1728
#endif
1729
1729
1730
- /* sol_socket options and general case */
1731
- switch (optname ) {
1732
- case SO_LINGER :
1733
- optlen = sizeof (linger_val );
1730
+ if ( level == SOL_SOCKET ) {
1731
+ switch (optname ) {
1732
+ case SO_LINGER :
1733
+ optlen = sizeof (linger_val );
1734
1734
1735
- if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& linger_val , & optlen ) != 0 ) {
1736
- PHP_SOCKET_ERROR (php_sock , "Unable to retrieve socket option" , errno );
1737
- RETURN_FALSE ;
1738
- }
1735
+ if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& linger_val , & optlen ) != 0 ) {
1736
+ PHP_SOCKET_ERROR (php_sock , "Unable to retrieve socket option" , errno );
1737
+ RETURN_FALSE ;
1738
+ }
1739
1739
1740
- array_init (return_value );
1741
- add_assoc_long (return_value , "l_onoff" , linger_val .l_onoff );
1742
- add_assoc_long (return_value , "l_linger" , linger_val .l_linger );
1743
- break ;
1740
+ array_init (return_value );
1741
+ add_assoc_long (return_value , "l_onoff" , linger_val .l_onoff );
1742
+ add_assoc_long (return_value , "l_linger" , linger_val .l_linger );
1743
+ return ;
1744
1744
1745
- case SO_RCVTIMEO :
1746
- case SO_SNDTIMEO :
1745
+ case SO_RCVTIMEO :
1746
+ case SO_SNDTIMEO :
1747
1747
#ifndef PHP_WIN32
1748
- optlen = sizeof (tv );
1748
+ optlen = sizeof (tv );
1749
1749
1750
- if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& tv , & optlen ) != 0 ) {
1751
- PHP_SOCKET_ERROR (php_sock , "Unable to retrieve socket option" , errno );
1752
- RETURN_FALSE ;
1753
- }
1750
+ if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& tv , & optlen ) != 0 ) {
1751
+ PHP_SOCKET_ERROR (php_sock , "Unable to retrieve socket option" , errno );
1752
+ RETURN_FALSE ;
1753
+ }
1754
1754
#else
1755
- optlen = sizeof (int );
1755
+ optlen = sizeof (int );
1756
1756
1757
- if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& timeout , & optlen ) != 0 ) {
1758
- PHP_SOCKET_ERROR (php_sock , "Unable to retrieve socket option" , errno );
1759
- RETURN_FALSE ;
1760
- }
1757
+ if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& timeout , & optlen ) != 0 ) {
1758
+ PHP_SOCKET_ERROR (php_sock , "Unable to retrieve socket option" , errno );
1759
+ RETURN_FALSE ;
1760
+ }
1761
1761
1762
- tv .tv_sec = timeout ? timeout / 1000 : 0 ;
1763
- tv .tv_usec = timeout ? (timeout * 1000 ) % 1000000 : 0 ;
1762
+ tv .tv_sec = timeout ? timeout / 1000 : 0 ;
1763
+ tv .tv_usec = timeout ? (timeout * 1000 ) % 1000000 : 0 ;
1764
1764
#endif
1765
1765
1766
- array_init (return_value );
1766
+ array_init (return_value );
1767
1767
1768
- add_assoc_long (return_value , "sec" , tv .tv_sec );
1769
- add_assoc_long (return_value , "usec" , tv .tv_usec );
1770
- break ;
1768
+ add_assoc_long (return_value , "sec" , tv .tv_sec );
1769
+ add_assoc_long (return_value , "usec" , tv .tv_usec );
1770
+ return ;
1771
+ }
1772
+ }
1771
1773
1772
- default :
1773
- optlen = sizeof (other_val );
1774
+ optlen = sizeof (other_val );
1774
1775
1775
- if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& other_val , & optlen ) != 0 ) {
1776
- PHP_SOCKET_ERROR (php_sock , "Unable to retrieve socket option" , errno );
1777
- RETURN_FALSE ;
1778
- }
1779
- if (optlen == 1 )
1780
- other_val = * ((unsigned char * )& other_val );
1776
+ if (getsockopt (php_sock -> bsd_socket , level , optname , (char * )& other_val , & optlen ) != 0 ) {
1777
+ PHP_SOCKET_ERROR (php_sock , "Unable to retrieve socket option" , errno );
1778
+ RETURN_FALSE ;
1779
+ }
1781
1780
1782
- RETURN_LONG ( other_val );
1783
- break ;
1781
+ if ( optlen == 1 ) {
1782
+ other_val = * (( unsigned char * ) & other_val ) ;
1784
1783
}
1784
+
1785
+ RETURN_LONG (other_val );
1785
1786
}
1786
1787
/* }}} */
1787
1788
0 commit comments