From 16743a7d86fc1a6c18663eaf339d87906870bfad Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Thu, 10 Dec 2015 17:37:38 +0200 Subject: [PATCH] SOCKET needs to be signed for slirp to work correctly. --- slirp/libslirp.h | 2 +- slirp/misc.cpp | 4 ++-- slirp/misc.h | 4 ++-- slirp/slirp.cpp | 4 ++-- slirp/slirp.h | 5 ++++- slirp/socket.cpp | 2 +- slirp/socket.h | 2 +- slirp/tcp_subr.cpp | 10 +++++----- slirp/udp.cpp | 2 +- slirp/udp.h | 2 +- slirp_uae.cpp | 5 ++++- 11 files changed, 24 insertions(+), 18 deletions(-) diff --git a/slirp/libslirp.h b/slirp/libslirp.h index 53acac81..6cb34ddd 100644 --- a/slirp/libslirp.h +++ b/slirp/libslirp.h @@ -12,7 +12,7 @@ int inet_aton(const char *cp, struct in_addr *ia); int slirp_init(void); void slirp_cleanup(void); -int slirp_select_fill(SOCKET *pnfds, +int slirp_select_fill(int *pnfds, fd_set *readfds, fd_set *writefds, fd_set *xfds); void slirp_select_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds); diff --git a/slirp/misc.cpp b/slirp/misc.cpp index 249aba41..cc51cdac 100644 --- a/slirp/misc.cpp +++ b/slirp/misc.cpp @@ -769,7 +769,7 @@ u_sleep(int usec) */ void -fd_nonblock(SOCKET fd) +fd_nonblock(SLIRP_SOCKET fd) { #if defined USE_FIONBIO && defined FIONBIO ioctlsockopt_t opt = 1; @@ -785,7 +785,7 @@ fd_nonblock(SOCKET fd) } void -fd_block(SOCKET fd) +fd_block(SLIRP_SOCKET fd) { #if defined USE_FIONBIO && defined FIONBIO ioctlsockopt_t opt = 0; diff --git a/slirp/misc.h b/slirp/misc.h index 0d85940d..d383f475 100644 --- a/slirp/misc.h +++ b/slirp/misc.h @@ -80,8 +80,8 @@ void snooze _P((void)); void relay _P((int)); void add_emu _P((char *)); void u_sleep _P((int)); -void fd_nonblock _P((SOCKET)); -void fd_block _P((SOCKET)); +void fd_nonblock _P((SLIRP_SOCKET)); +void fd_block _P((SLIRP_SOCKET)); int rsh_exec _P((struct socket *, struct socket *, char *, char *, char *)); #endif diff --git a/slirp/slirp.cpp b/slirp/slirp.cpp index 3416cd88..b8e3cc01 100644 --- a/slirp/slirp.cpp +++ b/slirp/slirp.cpp @@ -191,11 +191,11 @@ static void updtime(void) } #endif -int slirp_select_fill(SOCKET *pnfds, +int slirp_select_fill(int *pnfds, fd_set *readfds, fd_set *writefds, fd_set *xfds) { struct socket *so, *so_next; - SOCKET nfds; + int nfds; int timeout, tmp_time; /* fail safe */ diff --git a/slirp/slirp.h b/slirp/slirp.h index 483384ff..e8439059 100644 --- a/slirp/slirp.h +++ b/slirp/slirp.h @@ -230,6 +230,9 @@ int inet_aton _P((const char *cp, struct in_addr *ia)); # define EHOSTUNREACH WSAEHOSTUNREACH # define ENETUNREACH WSAENETUNREACH # define ECONNREFUSED WSAECONNREFUSED + +/* Should be UINT_PTR but SLIRP code has <= 0 tests */ +#define SLIRP_SOCKET INT_PTR #endif #include "debug.h" @@ -357,7 +360,7 @@ struct tcpcb * tcp_newtcpcb _P((struct socket *)); struct tcpcb * tcp_close _P((register struct tcpcb *)); void tcp_drain _P((void)); void tcp_sockclosed _P((struct tcpcb *)); -SOCKET tcp_fconnect _P((struct socket *)); +int tcp_fconnect _P((struct socket *)); void tcp_connect _P((struct socket *)); int tcp_attach _P((struct socket *)); u_int8_t tcp_tos _P((struct socket *)); diff --git a/slirp/socket.cpp b/slirp/socket.cpp index ab5e3dcc..5a77241c 100644 --- a/slirp/socket.cpp +++ b/slirp/socket.cpp @@ -516,7 +516,7 @@ struct socket *solisten(u_int port, u_int32_t laddr, u_int lport, int flags) { struct sockaddr_in addr; struct socket *so; - SOCKET s; + SLIRP_SOCKET s; socklen_t addrlen = sizeof(addr); int opt = 1; diff --git a/slirp/socket.h b/slirp/socket.h index e8a5faf3..f0945960 100644 --- a/slirp/socket.h +++ b/slirp/socket.h @@ -20,7 +20,7 @@ struct socket { struct socket *so_next,*so_prev; /* For a linked list of sockets */ - SOCKET s; /* The actual socket */ + SLIRP_SOCKET s; /* The actual socket */ /* XXX union these with not-yet-used sbuf params */ struct mbuf *so_m; /* Pointer to the original SYN packet, diff --git a/slirp/tcp_subr.cpp b/slirp/tcp_subr.cpp index 4205478c..f17eea2e 100644 --- a/slirp/tcp_subr.cpp +++ b/slirp/tcp_subr.cpp @@ -382,16 +382,16 @@ void tcp_sockclosed(struct tcpcb *tp) * nonblocking. Connect returns after the SYN is sent, and does * not wait for ACK+SYN. */ -SOCKET tcp_fconnect(struct socket *so) +int tcp_fconnect(struct socket *so) { - SOCKET ret=0; + int ret=0; DEBUG_CALL("tcp_fconnect"); DEBUG_ARG("so = %p", so); - if( (ret=so->s=socket(AF_INET,SOCK_STREAM,0)) >= 0) { + if( (so->s=socket(AF_INET,SOCK_STREAM,0)) >= 0) { int opt; - SOCKET s = so->s; + SLIRP_SOCKET s = so->s; struct sockaddr_in addr; memset(&addr, 0, sizeof(struct sockaddr_in)); @@ -449,7 +449,7 @@ void tcp_connect(struct socket *inso) struct sockaddr_in addr; socklen_t addrlen = sizeof(struct sockaddr_in); struct tcpcb *tp; - SOCKET s; + SLIRP_SOCKET s; int opt; DEBUG_CALL("tcp_connect"); diff --git a/slirp/udp.cpp b/slirp/udp.cpp index a87b658e..19a08f18 100644 --- a/slirp/udp.cpp +++ b/slirp/udp.cpp @@ -324,7 +324,7 @@ int udp_output(struct socket *so, struct mbuf *m, return udp_output2(so, m, &saddr, &daddr, so->so_iptos); } -SOCKET udp_attach(struct socket *so) +SLIRP_SOCKET udp_attach(struct socket *so) { struct sockaddr_in addr; diff --git a/slirp/udp.h b/slirp/udp.h index 6bdf8fd5..1b445059 100644 --- a/slirp/udp.h +++ b/slirp/udp.h @@ -97,7 +97,7 @@ void udp_init _P((void)); void udp_cleanup _P((void)); void udp_input _P((register struct mbuf *, int)); int udp_output _P((struct socket *, struct mbuf *, struct sockaddr_in *)); -SOCKET udp_attach _P((struct socket *)); +SLIRP_SOCKET udp_attach _P((struct socket *)); void udp_detach _P((struct socket *)); u_int8_t udp_tos _P((struct socket *)); void udp_emu _P((struct socket *, struct mbuf *)); diff --git a/slirp_uae.cpp b/slirp_uae.cpp index 7097c92a..b6ce86cc 100644 --- a/slirp_uae.cpp +++ b/slirp_uae.cpp @@ -142,7 +142,7 @@ static void *slirp_receive_func(void *arg) while (slirp_thread_active) { // Wait for packets to arrive fd_set rfds, wfds, xfds; - SOCKET nfds; + int nfds; int ret, timeout; // ... in the output queue @@ -163,6 +163,9 @@ static void *slirp_receive_func(void *arg) tv.tv_sec = 0; tv.tv_usec = timeout; ret = select(0, &rfds, &wfds, &xfds, &tv); + if (ret == SOCKET_ERROR) { + write_log(_T("SLIRP socket ERR=%d\n"), WSAGetLastError()); + } } if (ret >= 0) { uae_sem_wait (&slirp_sem2); -- 2.47.3