Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for compiling with lwIP #3155

Closed
wants to merge 2 commits into from

Conversation

@gvanem
Copy link
Member

commented Oct 22, 2018

Compiling on Windows (_WIN32) with USE_LWIPSOCK, causes this error:

  curl_rtmp.c(223,3):  error: use of undeclared identifier 'setsockopt'
    setsockopt(r->m_sb.sb_socket, SOL_SOCKET, SO_RCVTIMEO,
    ^
  curl_rtmp.c(41,32):  note: expanded from macro 'setsockopt'
  #define setsockopt(a,b,c,d,e) (setsockopt)(a,b,c,(const char *)d,(int)e)
                                 ^  

(from with clang-cl).
Since setsockopt() is really lwip_setsockopt() in <LWIP_ROOT>/src/include/lwip\sockets.h, do not redefine it.

Fix for compiling with lwIP
Compiling on _WIN32 and with USE_LWIPSOCK, causes this error:
  curl_rtmp.c(223,3):  error: use of undeclared identifier 'setsockopt'
    setsockopt(r->m_sb.sb_socket, SOL_SOCKET, SO_RCVTIMEO,
    ^
  curl_rtmp.c(41,32):  note: expanded from macro 'setsockopt'
  #define setsockopt(a,b,c,d,e) (setsockopt)(a,b,c,(const char *)d,(int)e)
                                 ^  
(from with clang-cl). 
Since 'setsockopt()'  is really 'lwip_setsockopt()' in '<LWIP_ROOT>/src/include/lwip\sockets.h', do not redefine it.
@jay

This comment has been minimized.

Copy link
Member

commented Oct 23, 2018

lwIP will take an int for rcvtime if it was built with LWIP_SO_SNDRCVTIMEO_NONSTANDARD. It doesn't say in the doc what causes that to be set. For example, is it set by default on Windows? (The only place where it would make any sense IMO). I searched the source but I don't see that it is actually turned on anywhere for any reason. Even if it was I don't know how we would determine that unless it was placed in a conf file? Just to be safe I propose we do this instead:

diff --git a/lib/curl_rtmp.c b/lib/curl_rtmp.c
index 9743064..d962127 100644
--- a/lib/curl_rtmp.c
+++ b/lib/curl_rtmp.c
@@ -37,8 +37,12 @@
 /* The last #include file should be: */
 #include "memdebug.h"

-#ifdef _WIN32
+#ifdef WIN32
 #define setsockopt(a,b,c,d,e) (setsockopt)(a,b,c,(const char *)d,(int)e)
+#endif
+
+#if (defined(WIN32) && !defined(USE_LWIPSOCK)) || \
+    defined(LWIP_SO_SNDRCVTIMEO_NONSTANDARD)
 #define SET_RCVTIMEO(tv,s)   int tv = s*1000
 #else
 #define SET_RCVTIMEO(tv,s)   struct timeval tv = {s,0}
@jay

This comment has been minimized.

Copy link
Member

commented Oct 23, 2018

hm I see what you mean.. ok how about this:

diff --git a/lib/curl_rtmp.c b/lib/curl_rtmp.c
index 9743064..109f2b1 100644
--- a/lib/curl_rtmp.c
+++ b/lib/curl_rtmp.c
@@ -37,9 +37,11 @@
 /* The last #include file should be: */
 #include "memdebug.h"

-#ifdef _WIN32
+#if (defined(WIN32) && !defined(USE_LWIPSOCK))
 #define setsockopt(a,b,c,d,e) (setsockopt)(a,b,c,(const char *)d,(int)e)
 #define SET_RCVTIMEO(tv,s)   int tv = s*1000
+#elif defined(LWIP_SO_SNDRCVTIMEO_NONSTANDARD)
+#define SET_RCVTIMEO(tv,s)   int tv = s*1000
 #else
 #define SET_RCVTIMEO(tv,s)   struct timeval tv = {s,0}
 #endif
@gvanem

This comment has been minimized.

Copy link
Member Author

commented Oct 23, 2018

LWIP_SO_SNDRCVTIMEO_NONSTANDARD is 0 by default. Your last patch seems okay.

Fix for compiling with lwIP (2)
Per Jay Satiros comment, adapt for the case when 'LWIP_SO_SNDRCVTIMEO_NONSTANDARD = 1'
@bagder
bagder approved these changes Oct 24, 2018

@bagder bagder closed this in 639d052 Oct 25, 2018

@bagder

This comment has been minimized.

Copy link
Member

commented Oct 25, 2018

I took the liberty of merging this. Thanks @gvanem !

@bagder bagder deleted the lwip-patch branch Oct 25, 2018

@lock lock bot locked as resolved and limited conversation to collaborators Jan 23, 2019

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
3 participants
You can’t perform that action at this time.