Sockets in MinGW

Viewed 75168

I was just trying to build netcat in MSYS using MinGW and realized that MinGW never really ported all of the BSD socket stuff to Windows (eg sys/socket.h). I know you can use Windows Sockets in MinGW, but why did they never make a Windows port of the BSD sockets? I noticed quite a few programs using #ifdef's to workaround the issue. Is there a Windows port of the BSD sockets somewhere that can be used instead?

Here are the errors when doing a make for netcat in MSYS:


gcc -DLOCALEDIR=\"\/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -Wall -c `test -f 'core.c' || echo './'`core.c
In file included from core.c:29:
netcat.h:38:24: sys/socket.h: No such file or directory
netcat.h:39:63: sys/uio.h: No such file or directory
netcat.h:41:24: netinet/in.h: No such file or directory
netcat.h:42:55: arpa/inet.h: No such file or directory

There are no #ifdef's for MinGW. Is there a library/package I can add to MSYS to make everything compile without errors?

Note: You can download netcat here and browse the CVS repo here

6 Answers

These comments from another answer served as the answer I needed to get a piece of simple bsd socket code to compile with mingw on windows.

Replace all of those includes with #include as that would be the equivalent header for winsock, then see what happens.

You will also need to link against ws2_32 and use WSAStartup/WSACleanup. Which might get you up and running.

EDIT: I also ended up having to replace close with shutdown / closesocket and write with send. The code compiled fine but didn't actually work without those additional changes.

MingWin is minimalist, and that is the most important aspect of it. Because it makes it easier to understand, at the end it is the developer's responsibility to write the application. MingWin only makes things easier but does no magic in turing nix apps to windows.

Related