Ticket #15562 (confirmed defect)
Use ws2_32.dll (Winsock 2) instead of the ancient wsock32.dll (Winsock 1.1)
|Reported by:||justinian||Owned by:|
|Keywords:||winsock winsock2 pragma linking||Cc:|
I've been encountering a problem when using wxWidgets-2.9.5 with boost::asio (or, conceivably, other networking libraries) when relying on calls that differ between winsock 1.1 and winsock 2. (setsockopt with IP_TTL is an example.)
The problem exists even if I exclude networking classes from wx with wxNO_NET_LIB, or wxUSE_SOCKETS=0, have the correct header order and/or never include a wx header that includes <winsock.h>.
The problem is that source:wxWidgets/trunk/include/msvc/wx/setup.h contains the line:
#pragma comment(lib, "wsock32")
This causes the winsock 1.1 libraries to be linked, and so calls made to matching functions from winsock 2 link against the wrong functions.
My basic fix for this is to just move the pragma inside the existing ifdef block for wxNO_NET_LIB, which I've attached a simple patch for. Ideally, I'd love to see wx switch to winsock 2 in general as well (winsock 1.1 is 17 years old on the desktop, 10 years old on WinCE..), but I understand that means changing includes and re-testing all the existing classes for compatibility.
Also, I've seen other winsock-related issues here (In particular #10931), which relate to header inclusion order get closed as invalid. Please note that this issue is linking-related, not windows header related.