@@ -72,6 +72,10 @@ distribution.
72
72
73
73
#define IOCTLV_SO_GETINTERFACEOPT_LEVEL 0x0000FFFE;
74
74
75
+ //wii doesn't use, or use, sin_zero in sockaddr_in and all communications assumes its not there
76
+ //bsd sockets does have it, so we ignore it using this size define
77
+ #define WII_SOCKADDR_IN_SIZE offsetof(struct sockaddr_in, sin_addr)
78
+
75
79
enum {
76
80
IOCTL_SO_ACCEPT = 1 ,
77
81
IOCTL_SO_BIND ,
@@ -820,12 +824,12 @@ s32 net_bind(s32 s, struct sockaddr *name, socklen_t namelen)
820
824
if (net_ip_top_fd < 0 ) return - ENXIO ;
821
825
if (name -> sa_family != AF_INET ) return - EAFNOSUPPORT ;
822
826
823
- name -> sa_len = 8 ;
827
+ name -> sa_len = WII_SOCKADDR_IN_SIZE ;
824
828
825
829
memset (params , 0 , sizeof (struct bind_params ));
826
830
params -> socket = s ;
827
831
params -> has_name = 1 ;
828
- memcpy (params -> name , name , 8 );
832
+ memcpy (params -> name , name , WII_SOCKADDR_IN_SIZE );
829
833
830
834
ret = _net_convert_error (IOS_Ioctl (net_ip_top_fd , IOCTL_SO_BIND , params , sizeof (struct bind_params ), NULL , 0 ));
831
835
debug_printf ("net_bind(%d, %p)=%d\n" , s , name , ret );
@@ -860,14 +864,14 @@ s32 net_accept(s32 s, struct sockaddr *addr, socklen_t *addrlen)
860
864
if (net_ip_top_fd < 0 ) return - ENXIO ;
861
865
862
866
if (!addr ) return - EINVAL ;
863
- addr -> sa_len = 8 ;
867
+ addr -> sa_len = WII_SOCKADDR_IN_SIZE ;
864
868
addr -> sa_family = AF_INET ;
865
869
866
870
if (!addrlen ) return - EINVAL ;
867
871
868
- if (* addrlen < 8 ) return - ENOMEM ;
872
+ if (* addrlen < WII_SOCKADDR_IN_SIZE ) return - ENOMEM ;
869
873
870
- * addrlen = 8 ;
874
+ * addrlen = WII_SOCKADDR_IN_SIZE ;
871
875
872
876
* _socket = s ;
873
877
debug_printf ("calling ios_ioctl(%d, %d, %p, %d)\n" , net_ip_top_fd , IOCTL_SO_ACCEPT , _socket , 4 );
@@ -884,9 +888,9 @@ s32 net_connect(s32 s, struct sockaddr *addr, socklen_t addrlen)
884
888
885
889
if (net_ip_top_fd < 0 ) return - ENXIO ;
886
890
if (addr -> sa_family != AF_INET ) return - EAFNOSUPPORT ;
887
- if (addrlen < 8 ) return - EINVAL ;
891
+ if (addrlen < WII_SOCKADDR_IN_SIZE ) return - EINVAL ;
888
892
889
- addrlen = 8 ;
893
+ addrlen = WII_SOCKADDR_IN_SIZE ;
890
894
891
895
addr -> sa_len = addrlen ;
892
896
@@ -1143,11 +1147,11 @@ s32 net_getsockname(s32 s, struct sockaddr *addr, socklen_t *addrlen)
1143
1147
if (!addr ) return - EINVAL ;
1144
1148
if (!addrlen ) return - EINVAL ;
1145
1149
1146
- if (* addrlen < 8 ) return - ENOMEM ;
1150
+ if (* addrlen < WII_SOCKADDR_IN_SIZE ) return - ENOMEM ;
1147
1151
1148
- addr -> sa_len = 8 ;
1152
+ addr -> sa_len = WII_SOCKADDR_IN_SIZE ;
1149
1153
addr -> sa_family = AF_INET ;
1150
- * addrlen = 8 ;
1154
+ * addrlen = WII_SOCKADDR_IN_SIZE ;
1151
1155
* _socket = s ;
1152
1156
1153
1157
ret = _net_convert_error (IOS_Ioctl (net_ip_top_fd , IOCTL_SO_GETSOCKNAME , _socket , 4 , addr , * addrlen ));
0 commit comments