- Fixed bug #35059 (Apache2 crash with mod_rewrite). (Ilia)
- Fixed bug #34996 (ImageTrueColorToPalette() crashes when ncolors is
zero). (Tony)
+- Fixed bug #34851 (SO_RECVTIMEO and SO_SNDTIMEO socket options expect integer
+ parameter on Windows). (Mike)
- Fixed bug #33760 (cURL needs to implement CRYPTO_callback functions to prevent
locking). (Mike)
zval *arg1;
struct linger linger_val;
struct timeval tv;
+ int timeout = 0;
socklen_t optlen;
php_socket *php_sock;
int other_val;
break;
case SO_RCVTIMEO:
case SO_SNDTIMEO:
+#ifndef PHP_WIN32
optlen = sizeof(tv);
if (getsockopt(php_sock->bsd_socket, level, optname, (char*)&tv, &optlen) != 0) {
PHP_SOCKET_ERROR(php_sock, "unable to retrieve socket option", errno);
RETURN_FALSE;
}
+#else
+ optlen = sizeof(int);
+
+ if (getsockopt(php_sock->bsd_socket, level, optname, (char*)&timeout, &optlen) != 0) {
+ PHP_SOCKET_ERROR(php_sock, "unable to retrieve socket option", errno);
+ RETURN_FALSE;
+ }
+
+ tv.tv_sec = timeout ? timeout / 1000 : 0;
+ tv.tv_usec = timeout ? (timeout * 1000) % 1000000 : 0;
+#endif
if (array_init(return_value) == FAILURE) {
RETURN_FALSE;
struct linger lv;
struct timeval tv;
php_socket *php_sock;
- int ov, optlen, retval;
+ int ov, optlen, retval, timeout;
long level, optname;
void *opt_ptr;
convert_to_long_ex(sec);
convert_to_long_ex(usec);
+#ifndef PHP_WIN32
tv.tv_sec = Z_LVAL_PP(sec);
tv.tv_usec = Z_LVAL_PP(usec);
-
optlen = sizeof(tv);
opt_ptr = &tv;
+#else
+ timeout = Z_LVAL_PP(sec) * 1000 + Z_LVAL_PP(usec) / 1000;
+ optlen = sizeof(int);
+ opt_ptr = &timeout;
+#endif
break;
default:
convert_to_long_ex(&arg4);