+ case BIO_CTRL_DGRAM_SET_TIMEOUT:
+ if (num > 0)
+ {
+#ifdef OPENSSL_SYS_WIN32
+ struct timeb tb;
+ ftime(&tb);
+ data->hstimeout.tv_sec = tb.time;
+ data->hstimeout.tv_usec = tb.millitm * 1000;
+#else
+ gettimeofday(&(data->hstimeout), NULL);
+#endif
+ data->hstimeout.tv_sec += data->hstimeoutdiff.tv_sec;
+ data->hstimeout.tv_usec += data->hstimeoutdiff.tv_usec;
+ if (data->hstimeout.tv_usec >= 1000000)
+ {
+ data->hstimeout.tv_sec++;
+ data->hstimeout.tv_usec -= 1000000;
+ }
+ }
+ else
+ {
+ memset(&(data->hstimeout), 0, sizeof(struct timeval));
+ }
+ break;