Implement SYS_NET_SO_REUSEPORT

This commit is contained in:
Nekotekina 2017-10-04 20:02:11 +03:00
parent 3d64b65813
commit 3907dd0444
2 changed files with 46 additions and 0 deletions

View File

@ -718,11 +718,29 @@ s32 sys_net_bnet_getsockopt(ppu_thread& ppu, s32 s, s32 level, s32 optname, vm::
native_opt = SO_BROADCAST;
break;
}
#ifdef _WIN32
case SYS_NET_SO_REUSEADDR:
{
*(be_t<s32>*)optval.get_ptr() = sock.so_reuseaddr;
return 0;
}
case SYS_NET_SO_REUSEPORT:
{
*(be_t<s32>*)optval.get_ptr() = sock.so_reuseport;
return 0;
}
#else
case SYS_NET_SO_REUSEADDR:
{
native_opt = SO_REUSEADDR;
break;
}
case SYS_NET_SO_REUSEPORT:
{
native_opt = SO_REUSEPORT;
break;
}
#endif
case SYS_NET_SO_SNDTIMEO:
case SYS_NET_SO_RCVTIMEO:
{
@ -1166,11 +1184,33 @@ s32 sys_net_bnet_setsockopt(ppu_thread& ppu, s32 s, s32 level, s32 optname, vm::
native_opt = SO_BROADCAST;
break;
}
#ifdef _WIN32
case SYS_NET_SO_REUSEADDR:
{
native_opt = SO_REUSEADDR;
sock.so_reuseaddr = native_int;
native_int = sock.so_reuseaddr || sock.so_reuseport ? 1 : 0;
break;
}
case SYS_NET_SO_REUSEPORT:
{
native_opt = SO_REUSEADDR;
sock.so_reuseport = native_int;
native_int = sock.so_reuseaddr || sock.so_reuseport ? 1 : 0;
break;
}
#else
case SYS_NET_SO_REUSEADDR:
{
native_opt = SO_REUSEADDR;
break;
}
case SYS_NET_SO_REUSEPORT:
{
native_opt = SO_REUSEPORT;
break;
}
#endif
case SYS_NET_SO_SNDTIMEO:
case SYS_NET_SO_RCVTIMEO:
{

View File

@ -346,6 +346,12 @@ struct lv2_socket final
// Unsupported option
s32 so_tcp_maxseg = 1500;
// Value keepers
#ifdef _WIN32
s32 so_reuseaddr = 0;
s32 so_reuseport = 0;
#endif
// Event processing workload (pair of thread id and the processing function)
std::vector<std::pair<u32, std::function<bool(bs_t<lv2_socket::poll>)>>> queue;
};