31

I'm using Visual Studio 2015 and attempting to compile code that has worked before I updated from VS 2013.

'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS

in this code:

partner.sin_addr.s_addr = inet_addr(ip.c_str());

I attempted to use the functions mentioned but they were undefined. I attempted to define the macro in many different spots but nothing happened. Another thread said that I should include Ws2tcpip.h instead of WinSock2 & add Ws2_32.lib. I already have the library added, and when I used the include nothing happened. What is going on?!

Jenia
  • 374
  • 1
  • 4
  • 15
The Count
  • 311
  • 1
  • 3
  • 8

4 Answers4

38

Just to make the conversion clear. Let's say you have code using the deprecated inet_addr as in this example:

RecvAddr.sin_addr.s_addr = inet_addr("192.168.1.1");

It could be converted to the newer InetPton as follows:

InetPton(AF_INET, _T("192.168.1.1"), &RecvAddr.sin_addr.s_addr);

The _T macro prevents the "const char incompatible with PCWSTR" error.

Nagev
  • 10,835
  • 4
  • 58
  • 69
26

The ip string can be converted to the in_addr structure with the InetPton function. It is used like this:

InetPton(AF_INET, strIP, &ipv4addr)

You need to include the "Ws2tcpip.h" header file, use the library "Ws2_32.lib" and DLL "Ws2_32.dll".

Florian Haupt
  • 473
  • 6
  • 12
11

You can try

#pragma warning(disable:4996) 

for using inet_addr().

msc
  • 33,420
  • 29
  • 119
  • 214
Razin Bashar
  • 159
  • 1
  • 6
0

make sure you define _WINSOCK_DEPRECATED_NO_WARNINGS before all the include.

J CH
  • 35
  • 2
  • 8
    There's a reason for that warning. Blankly recommending to set this define reinforces bad style and delays what the warning points to: the need for modernizing the code. The use of `inet_addr` for example causes thread-safety issues. Even locally disabling the deprecation warning would be a better option since it makes the issue visible. – 0xC0000022L Apr 20 '20 at 11:24