summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bio/bss_dgram.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/bio/bss_dgram.c')
-rw-r--r--src/lib/libcrypto/bio/bss_dgram.c114
1 files changed, 1 insertions, 113 deletions
diff --git a/src/lib/libcrypto/bio/bss_dgram.c b/src/lib/libcrypto/bio/bss_dgram.c
index 330f6fc404..328bab9ce3 100644
--- a/src/lib/libcrypto/bio/bss_dgram.c
+++ b/src/lib/libcrypto/bio/bss_dgram.c
@@ -279,25 +279,12 @@ dgram_adjust_rcv_timeout(BIO *b)
279 struct timeval timenow, timeleft; 279 struct timeval timenow, timeleft;
280 280
281 /* Read current socket timeout */ 281 /* Read current socket timeout */
282#ifdef OPENSSL_SYS_WINDOWS
283 int timeout;
284
285 sz.i = sizeof(timeout);
286 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
287 (void*)&timeout, &sz.i) < 0) {
288 perror("getsockopt");
289 } else {
290 data->socket_timeout.tv_sec = timeout / 1000;
291 data->socket_timeout.tv_usec = (timeout % 1000) * 1000;
292 }
293#else
294 sz.i = sizeof(data->socket_timeout); 282 sz.i = sizeof(data->socket_timeout);
295 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 283 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
296 &(data->socket_timeout), (void *)&sz) < 0) { 284 &(data->socket_timeout), (void *)&sz) < 0) {
297 perror("getsockopt"); 285 perror("getsockopt");
298 } else if (sizeof(sz.s) != sizeof(sz.i) && sz.i == 0) 286 } else if (sizeof(sz.s) != sizeof(sz.i) && sz.i == 0)
299 OPENSSL_assert(sz.s <= sizeof(data->socket_timeout)); 287 OPENSSL_assert(sz.s <= sizeof(data->socket_timeout));
300#endif
301 288
302 /* Get current time */ 289 /* Get current time */
303 get_current_time(&timenow); 290 get_current_time(&timenow);
@@ -324,18 +311,10 @@ dgram_adjust_rcv_timeout(BIO *b)
324 (data->socket_timeout.tv_sec > timeleft.tv_sec) || 311 (data->socket_timeout.tv_sec > timeleft.tv_sec) ||
325 (data->socket_timeout.tv_sec == timeleft.tv_sec && 312 (data->socket_timeout.tv_sec == timeleft.tv_sec &&
326 data->socket_timeout.tv_usec >= timeleft.tv_usec)) { 313 data->socket_timeout.tv_usec >= timeleft.tv_usec)) {
327#ifdef OPENSSL_SYS_WINDOWS
328 timeout = timeleft.tv_sec * 1000 + timeleft.tv_usec / 1000;
329 if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
330 (void*)&timeout, sizeof(timeout)) < 0) {
331 perror("setsockopt");
332 }
333#else
334 if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 314 if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
335 &timeleft, sizeof(struct timeval)) < 0) { 315 &timeleft, sizeof(struct timeval)) < 0) {
336 perror("setsockopt"); 316 perror("setsockopt");
337 } 317 }
338#endif
339 } 318 }
340 } 319 }
341#endif 320#endif
@@ -349,19 +328,10 @@ dgram_reset_rcv_timeout(BIO *b)
349 328
350 /* Is a timer active? */ 329 /* Is a timer active? */
351 if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0) { 330 if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0) {
352#ifdef OPENSSL_SYS_WINDOWS
353 int timeout = data->socket_timeout.tv_sec * 1000 +
354 data->socket_timeout.tv_usec / 1000;
355 if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
356 (void*)&timeout, sizeof(timeout)) < 0) {
357 perror("setsockopt");
358 }
359#else
360 if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 331 if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
361 &(data->socket_timeout), sizeof(struct timeval)) < 0) { 332 &(data->socket_timeout), sizeof(struct timeval)) < 0) {
362 perror("setsockopt"); 333 perror("setsockopt");
363 } 334 }
364#endif
365 } 335 }
366#endif 336#endif
367} 337}
@@ -716,23 +686,11 @@ default:
716 break; 686 break;
717#if defined(SO_RCVTIMEO) 687#if defined(SO_RCVTIMEO)
718 case BIO_CTRL_DGRAM_SET_RECV_TIMEOUT: 688 case BIO_CTRL_DGRAM_SET_RECV_TIMEOUT:
719#ifdef OPENSSL_SYS_WINDOWS
720 {
721 struct timeval *tv = (struct timeval *)ptr;
722 int timeout = tv->tv_sec * 1000 + tv->tv_usec/1000;
723 if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
724 (void*)&timeout, sizeof(timeout)) < 0) {
725 perror("setsockopt");
726 ret = -1;
727 }
728 }
729#else
730 if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, ptr, 689 if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, ptr,
731 sizeof(struct timeval)) < 0) { 690 sizeof(struct timeval)) < 0) {
732 perror("setsockopt"); 691 perror("setsockopt");
733 ret = -1; 692 ret = -1;
734 } 693 }
735#endif
736 break; 694 break;
737 case BIO_CTRL_DGRAM_GET_RECV_TIMEOUT: 695 case BIO_CTRL_DGRAM_GET_RECV_TIMEOUT:
738 { 696 {
@@ -740,21 +698,6 @@ default:
740 size_t s; 698 size_t s;
741 int i; 699 int i;
742 } sz = {0}; 700 } sz = {0};
743#ifdef OPENSSL_SYS_WINDOWS
744 int timeout;
745 struct timeval *tv = (struct timeval *)ptr;
746
747 sz.i = sizeof(timeout);
748 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
749 (void*)&timeout, &sz.i) < 0) {
750 perror("getsockopt");
751 ret = -1;
752 } else {
753 tv->tv_sec = timeout / 1000;
754 tv->tv_usec = (timeout % 1000) * 1000;
755 ret = sizeof(*tv);
756 }
757#else
758 sz.i = sizeof(struct timeval); 701 sz.i = sizeof(struct timeval);
759 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 702 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
760 ptr, (void *)&sz) < 0) { 703 ptr, (void *)&sz) < 0) {
@@ -765,29 +708,16 @@ default:
765 ret = (int)sz.s; 708 ret = (int)sz.s;
766 } else 709 } else
767 ret = sz.i; 710 ret = sz.i;
768#endif
769 } 711 }
770 break; 712 break;
771#endif 713#endif
772#if defined(SO_SNDTIMEO) 714#if defined(SO_SNDTIMEO)
773 case BIO_CTRL_DGRAM_SET_SEND_TIMEOUT: 715 case BIO_CTRL_DGRAM_SET_SEND_TIMEOUT:
774#ifdef OPENSSL_SYS_WINDOWS
775 {
776 struct timeval *tv = (struct timeval *)ptr;
777 int timeout = tv->tv_sec * 1000 + tv->tv_usec/1000;
778 if (setsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO,
779 (void*)&timeout, sizeof(timeout)) < 0) {
780 perror("setsockopt");
781 ret = -1;
782 }
783 }
784#else
785 if (setsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, ptr, 716 if (setsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, ptr,
786 sizeof(struct timeval)) < 0) { 717 sizeof(struct timeval)) < 0) {
787 perror("setsockopt"); 718 perror("setsockopt");
788 ret = -1; 719 ret = -1;
789 } 720 }
790#endif
791 break; 721 break;
792 case BIO_CTRL_DGRAM_GET_SEND_TIMEOUT: 722 case BIO_CTRL_DGRAM_GET_SEND_TIMEOUT:
793 { 723 {
@@ -795,21 +725,6 @@ default:
795 size_t s; 725 size_t s;
796 int i; 726 int i;
797 } sz = {0}; 727 } sz = {0};
798#ifdef OPENSSL_SYS_WINDOWS
799 int timeout;
800 struct timeval *tv = (struct timeval *)ptr;
801
802 sz.i = sizeof(timeout);
803 if (getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO,
804 (void*)&timeout, &sz.i) < 0) {
805 perror("getsockopt");
806 ret = -1;
807 } else {
808 tv->tv_sec = timeout / 1000;
809 tv->tv_usec = (timeout % 1000) * 1000;
810 ret = sizeof(*tv);
811 }
812#else
813 sz.i = sizeof(struct timeval); 728 sz.i = sizeof(struct timeval);
814 if (getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, 729 if (getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO,
815 ptr, (void *)&sz) < 0) { 730 ptr, (void *)&sz) < 0) {
@@ -820,19 +735,13 @@ default:
820 ret = (int)sz.s; 735 ret = (int)sz.s;
821 } else 736 } else
822 ret = sz.i; 737 ret = sz.i;
823#endif
824 } 738 }
825 break; 739 break;
826#endif 740#endif
827 case BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP: 741 case BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP:
828 /* fall-through */ 742 /* fall-through */
829 case BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP: 743 case BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP:
830#ifdef OPENSSL_SYS_WINDOWS 744 if (data->_errno == EAGAIN) {
831 if (data->_errno == WSAETIMEDOUT)
832#else
833 if (data->_errno == EAGAIN)
834#endif
835 {
836 ret = 1; 745 ret = 1;
837 data->_errno = 0; 746 data->_errno = 0;
838 } else 747 } else
@@ -1769,16 +1678,6 @@ BIO_dgram_should_retry(int i)
1769 1678
1770 if ((i == 0) || (i == -1)) { 1679 if ((i == 0) || (i == -1)) {
1771 err = errno; 1680 err = errno;
1772
1773#if defined(OPENSSL_SYS_WINDOWS)
1774 /* If the socket return value (i) is -1
1775 * and err is unexpectedly 0 at this point,
1776 * the error code was overwritten by
1777 * another system call before this error
1778 * handling is called.
1779 */
1780#endif
1781
1782 return (BIO_dgram_non_fatal_error(err)); 1681 return (BIO_dgram_non_fatal_error(err));
1783 } 1682 }
1784 return (0); 1683 return (0);
@@ -1788,17 +1687,6 @@ int
1788BIO_dgram_non_fatal_error(int err) 1687BIO_dgram_non_fatal_error(int err)
1789{ 1688{
1790 switch (err) { 1689 switch (err) {
1791#if defined(OPENSSL_SYS_WINDOWS)
1792# if defined(WSAEWOULDBLOCK)
1793 case WSAEWOULDBLOCK:
1794# endif
1795
1796# if 0 /* This appears to always be an error */
1797# if defined(WSAENOTCONN)
1798 case WSAENOTCONN:
1799# endif
1800# endif
1801#endif
1802 1690
1803#ifdef EWOULDBLOCK 1691#ifdef EWOULDBLOCK
1804# ifdef WSAEWOULDBLOCK 1692# ifdef WSAEWOULDBLOCK