From 683b593c838db1fc2c2e303bb3811a4503e98a9b Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Wed, 22 Apr 2015 21:20:40 +0100 Subject: mingw: additional networking support --- win32/net.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'win32') diff --git a/win32/net.c b/win32/net.c index eadda6b69..a44d91abb 100644 --- a/win32/net.c +++ b/win32/net.c @@ -52,3 +52,50 @@ int mingw_connect(int sockfd, struct sockaddr *sa, size_t sz) SOCKET s = (SOCKET)_get_osfhandle(sockfd); return connect(s, sa, sz); } + +#undef bind +int mingw_bind(int sockfd, struct sockaddr *sa, size_t sz) +{ + SOCKET s = (SOCKET)_get_osfhandle(sockfd); + return bind(s, sa, sz); +} + +#undef setsockopt +int mingw_setsockopt(int sockfd, int lvl, int optname, void *optval, int optlen) +{ + SOCKET s = (SOCKET)_get_osfhandle(sockfd); + return setsockopt(s, lvl, optname, (const char*)optval, optlen); +} + +#undef shutdown +int mingw_shutdown(int sockfd, int how) +{ + SOCKET s = (SOCKET)_get_osfhandle(sockfd); + return shutdown(s, how); +} + +#undef listen +int mingw_listen(int sockfd, int backlog) +{ + SOCKET s = (SOCKET)_get_osfhandle(sockfd); + return listen(s, backlog); +} + +#undef accept +int mingw_accept(int sockfd1, struct sockaddr *sa, socklen_t *sz) +{ + int sockfd2; + + SOCKET s1 = (SOCKET)_get_osfhandle(sockfd1); + SOCKET s2 = accept(s1, sa, sz); + + /* convert into a file descriptor */ + if ((sockfd2 = _open_osfhandle(s2, O_RDWR|O_BINARY)) < 0) { + int err = errno; + closesocket(s2); + bb_error_msg("unable to make a socket file descriptor: %s", + strerror(err)); + return -1; + } + return sockfd2; +} -- cgit v1.2.3-55-g6feb