@@ -118,6 +118,15 @@ enum {
118118 SO_GETINTERFACEOPT_ROUTING = 0x4006 ,
119119};
120120
121+ //wii doesn't have, or use, sin_zero in sockaddr_in and all communications assumes its not there
122+ //bsd sockets does have it, so we ignore it. the struct is directly compatible with bsd sockets normally
123+ struct wii_sockaddr_in {
124+ u8 sin_len ;
125+ u8 sin_family ;
126+ u16 sin_port ;
127+ u32 sin_addr ;
128+ };
129+
121130struct init_data {
122131 u32 state ;
123132 s32 fd ;
@@ -820,12 +829,12 @@ s32 net_bind(s32 s, struct sockaddr *name, socklen_t namelen)
820829 if (net_ip_top_fd < 0 ) return - ENXIO ;
821830 if (name -> sa_family != AF_INET ) return - EAFNOSUPPORT ;
822831
823- name -> sa_len = 8 ;
832+ name -> sa_len = sizeof ( struct wii_sockaddr_in ) ;
824833
825834 memset (params , 0 , sizeof (struct bind_params ));
826835 params -> socket = s ;
827836 params -> has_name = 1 ;
828- memcpy (params -> name , name , 8 );
837+ memcpy (params -> name , name , sizeof ( struct wii_sockaddr_in ) );
829838
830839 ret = _net_convert_error (IOS_Ioctl (net_ip_top_fd , IOCTL_SO_BIND , params , sizeof (struct bind_params ), NULL , 0 ));
831840 debug_printf ("net_bind(%d, %p)=%d\n" , s , name , ret );
@@ -860,14 +869,14 @@ s32 net_accept(s32 s, struct sockaddr *addr, socklen_t *addrlen)
860869 if (net_ip_top_fd < 0 ) return - ENXIO ;
861870
862871 if (!addr ) return - EINVAL ;
863- addr -> sa_len = 8 ;
872+ addr -> sa_len = sizeof ( struct wii_sockaddr_in ) ;
864873 addr -> sa_family = AF_INET ;
865874
866875 if (!addrlen ) return - EINVAL ;
867876
868- if (* addrlen < 8 ) return - ENOMEM ;
877+ if (* addrlen < sizeof ( struct wii_sockaddr_in ) ) return - ENOMEM ;
869878
870- * addrlen = 8 ;
879+ * addrlen = sizeof ( struct wii_sockaddr_in ) ;
871880
872881 * _socket = s ;
873882 debug_printf ("calling ios_ioctl(%d, %d, %p, %d)\n" , net_ip_top_fd , IOCTL_SO_ACCEPT , _socket , 4 );
@@ -884,9 +893,9 @@ s32 net_connect(s32 s, struct sockaddr *addr, socklen_t addrlen)
884893
885894 if (net_ip_top_fd < 0 ) return - ENXIO ;
886895 if (addr -> sa_family != AF_INET ) return - EAFNOSUPPORT ;
887- if (addrlen < 8 ) return - EINVAL ;
896+ if (addrlen < sizeof ( struct wii_sockaddr_in ) ) return - EINVAL ;
888897
889- addrlen = 8 ;
898+ addrlen = sizeof ( struct wii_sockaddr_in ) ;
890899
891900 addr -> sa_len = addrlen ;
892901
@@ -1143,11 +1152,11 @@ s32 net_getsockname(s32 s, struct sockaddr *addr, socklen_t *addrlen)
11431152 if (!addr ) return - EINVAL ;
11441153 if (!addrlen ) return - EINVAL ;
11451154
1146- if (* addrlen < 8 ) return - ENOMEM ;
1155+ if (* addrlen < sizeof ( struct wii_sockaddr_in ) ) return - ENOMEM ;
11471156
1148- addr -> sa_len = 8 ;
1157+ addr -> sa_len = sizeof ( struct wii_sockaddr_in ) ;
11491158 addr -> sa_family = AF_INET ;
1150- * addrlen = 8 ;
1159+ * addrlen = sizeof ( struct wii_sockaddr_in ) ;
11511160 * _socket = s ;
11521161
11531162 ret = _net_convert_error (IOS_Ioctl (net_ip_top_fd , IOCTL_SO_GETSOCKNAME , _socket , 4 , addr , * addrlen ));
0 commit comments