Module: wine Branch: master Commit: 6a80fe9e6bdfe28f4600dee41367e95e9e23b7a0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6a80fe9e6bdfe28f4600dee413...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Apr 27 16:00:57 2015 +0200
ws2_32: Call get_rcvsnd_timeo directly.
---
dlls/ws2_32/socket.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index d6bfa94..f904252 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -1252,29 +1252,31 @@ static char *strdup_lower(const char *str) /* Utility: get the SO_RCVTIMEO or SO_SNDTIMEO socket option * from an fd and return the value converted to milli seconds * or 0 if there is an infinite time out */ -static inline INT64 get_rcvsnd_timeo( int fd, int optname) +static inline INT64 get_rcvsnd_timeo( int fd, BOOL is_recv) { struct timeval tv; socklen_t len = sizeof(tv); - int res = getsockopt(fd, SOL_SOCKET, optname, &tv, &len); - if (res < 0) - return 0; - return (UINT64)tv.tv_sec * 1000 + tv.tv_usec / 1000; -} + int optname, res;
-/* macro wrappers for portability */ + if (is_recv) #ifdef SO_RCVTIMEO -#define GET_RCVTIMEO(fd) get_rcvsnd_timeo( (fd), SO_RCVTIMEO) + optname = SO_RCVTIMEO; #else -#define GET_RCVTIMEO(fd) (0) + return 0; #endif - + else #ifdef SO_SNDTIMEO -#define GET_SNDTIMEO(fd) get_rcvsnd_timeo( (fd), SO_SNDTIMEO) + optname = SO_SNDTIMEO; #else -#define GET_SNDTIMEO(fd) (0) + return 0; #endif
+ res = getsockopt(fd, SOL_SOCKET, optname, &tv, &len); + if (res < 0) + return 0; + return (UINT64)tv.tv_sec * 1000 + tv.tv_usec / 1000; +} + /* utility: given an fd, will block until one of the events occurs */ static inline int do_block( int fd, int events, int timeout ) { @@ -5075,7 +5077,7 @@ static int WS2_sendto( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, { struct pollfd pfd; int poll_timeout = -1; - INT64 timeout = GET_SNDTIMEO(fd); + INT64 timeout = get_rcvsnd_timeo(fd, FALSE);
if (timeout) { @@ -7131,7 +7133,7 @@ static int WS2_recv_base( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, { struct pollfd pfd; int poll_timeout = -1; - INT64 timeout = GET_RCVTIMEO(fd); + INT64 timeout = get_rcvsnd_timeo(fd, TRUE);
if (timeout) {