Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sockets in MinGW

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

like image 760
User1 Avatar asked Oct 05 '09 00:10

User1


1 Answers

BSD sys/socket.h is a POSIX header and the win32 API doesn't support it. MinGW headers are just a reimplementation of native win32 headers and don't offer additional POSIX compatibility.

If you are looking for sys/socket.h support, try either GNU gnulib's sys/socket.h replacement or go with Cygwin, which provides a POSIX compatibility wrapper on Windows.

like image 195
kalev Avatar answered Sep 20 '22 21:09

kalev