aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2015-04-22 21:20:40 +0100
committerRon Yorston <rmy@pobox.com>2015-04-22 21:20:40 +0100
commit683b593c838db1fc2c2e303bb3811a4503e98a9b (patch)
tree61ac8cc87c3fd6c9c3faa1a0970986fa5429a443
parentf40a7116939fce9574c8095a83026a0d68a20a27 (diff)
downloadbusybox-w32-683b593c838db1fc2c2e303bb3811a4503e98a9b.tar.gz
busybox-w32-683b593c838db1fc2c2e303bb3811a4503e98a9b.tar.bz2
busybox-w32-683b593c838db1fc2c2e303bb3811a4503e98a9b.zip
mingw: additional networking support
-rw-r--r--include/mingw.h15
-rw-r--r--win32/net.c47
2 files changed, 60 insertions, 2 deletions
diff --git a/include/mingw.h b/include/mingw.h
index 247aae587..86259f2d1 100644
--- a/include/mingw.h
+++ b/include/mingw.h
@@ -217,18 +217,29 @@ int ioctl(int fd, int code, ...);
217 */ 217 */
218#define hstrerror strerror 218#define hstrerror strerror
219 219
220#define SHUT_WR SD_SEND
221
220int mingw_socket(int domain, int type, int protocol); 222int mingw_socket(int domain, int type, int protocol);
221int mingw_connect(int sockfd, struct sockaddr *sa, size_t sz); 223int mingw_connect(int sockfd, struct sockaddr *sa, size_t sz);
224int mingw_bind(int sockfd, struct sockaddr *sa, size_t sz);
225int mingw_setsockopt(int sockfd, int lvl, int optname, void *optval, int optlen);
226int mingw_shutdown(int sockfd, int how);
227int mingw_listen(int sockfd, int backlog);
228int mingw_accept(int sockfd1, struct sockaddr *sa, socklen_t *sz);
229int mingw_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds,
230 struct timeval *timeout);
222 231
223NOIMPL(mingw_sendto,SOCKET s UNUSED_PARAM, const char *buf UNUSED_PARAM, int len UNUSED_PARAM, int flags UNUSED_PARAM, const struct sockaddr *sa UNUSED_PARAM, int salen UNUSED_PARAM); 232NOIMPL(mingw_sendto,SOCKET s UNUSED_PARAM, const char *buf UNUSED_PARAM, int len UNUSED_PARAM, int flags UNUSED_PARAM, const struct sockaddr *sa UNUSED_PARAM, int salen UNUSED_PARAM);
224NOIMPL(mingw_listen,SOCKET s UNUSED_PARAM,int backlog UNUSED_PARAM);
225NOIMPL(mingw_bind,SOCKET s UNUSED_PARAM,const struct sockaddr* sa UNUSED_PARAM,int salen UNUSED_PARAM);
226 233
227#define socket mingw_socket 234#define socket mingw_socket
228#define connect mingw_connect 235#define connect mingw_connect
229#define sendto mingw_sendto 236#define sendto mingw_sendto
230#define listen mingw_listen 237#define listen mingw_listen
231#define bind mingw_bind 238#define bind mingw_bind
239#define setsockopt mingw_setsockopt
240#define shutdown mingw_shutdown
241#define accept mingw_accept
242#define select mingw_select
232 243
233/* 244/*
234 * sys/stat.h 245 * sys/stat.h
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)
52 SOCKET s = (SOCKET)_get_osfhandle(sockfd); 52 SOCKET s = (SOCKET)_get_osfhandle(sockfd);
53 return connect(s, sa, sz); 53 return connect(s, sa, sz);
54} 54}
55
56#undef bind
57int mingw_bind(int sockfd, struct sockaddr *sa, size_t sz)
58{
59 SOCKET s = (SOCKET)_get_osfhandle(sockfd);
60 return bind(s, sa, sz);
61}
62
63#undef setsockopt
64int mingw_setsockopt(int sockfd, int lvl, int optname, void *optval, int optlen)
65{
66 SOCKET s = (SOCKET)_get_osfhandle(sockfd);
67 return setsockopt(s, lvl, optname, (const char*)optval, optlen);
68}
69
70#undef shutdown
71int mingw_shutdown(int sockfd, int how)
72{
73 SOCKET s = (SOCKET)_get_osfhandle(sockfd);
74 return shutdown(s, how);
75}
76
77#undef listen
78int mingw_listen(int sockfd, int backlog)
79{
80 SOCKET s = (SOCKET)_get_osfhandle(sockfd);
81 return listen(s, backlog);
82}
83
84#undef accept
85int mingw_accept(int sockfd1, struct sockaddr *sa, socklen_t *sz)
86{
87 int sockfd2;
88
89 SOCKET s1 = (SOCKET)_get_osfhandle(sockfd1);
90 SOCKET s2 = accept(s1, sa, sz);
91
92 /* convert into a file descriptor */
93 if ((sockfd2 = _open_osfhandle(s2, O_RDWR|O_BINARY)) < 0) {
94 int err = errno;
95 closesocket(s2);
96 bb_error_msg("unable to make a socket file descriptor: %s",
97 strerror(err));
98 return -1;
99 }
100 return sockfd2;
101}