diff --git a/src/router.c b/src/router.c index f1af665..6899662 100644 --- a/src/router.c +++ b/src/router.c @@ -435,6 +435,7 @@ static int router_bind(struct router_vars *router, SOCKET control, SOCKET sock, new_addr->flags = flags; new_addr->ipaddr = iface_ipaddr; new_addr->netmask = iface_netmask; + new_addr->remote_addr.sa_family = AF_UNSPEC; new_addr->next = router->addrs; router->addrs = new_addr; diff --git a/src/router.h b/src/router.h index 8d0a9ab..41183c8 100644 --- a/src/router.h +++ b/src/router.h @@ -105,7 +105,7 @@ struct rclient { }; struct rpacket_header { - uint8_t src_ipaddr; + uint32_t src_ipaddr; char spare[20]; } __attribute__((__packed__)); diff --git a/src/winsock.c b/src/winsock.c index 07f1f9e..987cdfa 100644 --- a/src/winsock.c +++ b/src/winsock.c @@ -238,7 +238,7 @@ int WSAAPI bind(SOCKET fd, const struct sockaddr *addr, int addrlen) { RETURN_WSA(WSAEINVAL, -1); } - if(!rclient_bind(&g_rclient, fd, &ipxaddr, &(ptr->nic_bcast), ptr->flags & IPX_REUSE ? TRUE : FALSE)) { + if(!rclient_bind(&g_rclient, fd, &ipxaddr, &(ptr->nic_bcast), ptr->flags)) { RETURN(-1); } @@ -546,9 +546,9 @@ int WSAAPI getsockopt(SOCKET fd, int level, int optname, char FAR *optval, int F #define SET_FLAG(flag, state) \ if(state) { \ - sockptr->flags |= flag; \ + sockptr->flags |= (flag); \ }else{ \ - sockptr->flags &= flag; \ + sockptr->flags &= ~(flag); \ } #define RC_SET_FLAG(flag, state) \ @@ -602,7 +602,9 @@ int WSAAPI setsockopt(SOCKET fd, int level, int optname, const char FAR *optval, if(level == SOL_SOCKET) { if(optname == SO_BROADCAST) { + RC_SET_FLAG(IPX_BROADCAST, *bval); SET_FLAG(IPX_BROADCAST, *bval); + RETURN(0); }