mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-25 19:44:57 +00:00
Setsockopt fixes (#3308)
* setsockopt: return correct error values for EPROCUNAVAIL * setsockopt: handle SO_CONNECTTIMEO
This commit is contained in:
parent
19c3d05ac1
commit
824d332d0f
@ -257,13 +257,14 @@ int PosixSocket::SetSocketOptions(int level, int optname, const void* optval, u3
|
|||||||
CASE_SETSOCKOPT(SO_RCVTIMEO);
|
CASE_SETSOCKOPT(SO_RCVTIMEO);
|
||||||
CASE_SETSOCKOPT(SO_ERROR);
|
CASE_SETSOCKOPT(SO_ERROR);
|
||||||
CASE_SETSOCKOPT(SO_TYPE);
|
CASE_SETSOCKOPT(SO_TYPE);
|
||||||
|
CASE_SETSOCKOPT_VALUE(ORBIS_NET_SO_CONNECTTIMEO, &sockopt_so_connecttimeo);
|
||||||
CASE_SETSOCKOPT_VALUE(ORBIS_NET_SO_REUSEPORT, &sockopt_so_reuseport);
|
CASE_SETSOCKOPT_VALUE(ORBIS_NET_SO_REUSEPORT, &sockopt_so_reuseport);
|
||||||
CASE_SETSOCKOPT_VALUE(ORBIS_NET_SO_ONESBCAST, &sockopt_so_onesbcast);
|
CASE_SETSOCKOPT_VALUE(ORBIS_NET_SO_ONESBCAST, &sockopt_so_onesbcast);
|
||||||
CASE_SETSOCKOPT_VALUE(ORBIS_NET_SO_USECRYPTO, &sockopt_so_usecrypto);
|
CASE_SETSOCKOPT_VALUE(ORBIS_NET_SO_USECRYPTO, &sockopt_so_usecrypto);
|
||||||
CASE_SETSOCKOPT_VALUE(ORBIS_NET_SO_USESIGNATURE, &sockopt_so_usesignature);
|
CASE_SETSOCKOPT_VALUE(ORBIS_NET_SO_USESIGNATURE, &sockopt_so_usesignature);
|
||||||
case ORBIS_NET_SO_LINGER: {
|
case ORBIS_NET_SO_LINGER: {
|
||||||
if (socket_type != ORBIS_NET_SOCK_STREAM) {
|
if (socket_type != ORBIS_NET_SOCK_STREAM) {
|
||||||
return ORBIS_NET_EPROCUNAVAIL;
|
return ORBIS_NET_ERROR_EPROCUNAVAIL;
|
||||||
}
|
}
|
||||||
if (optlen < sizeof(OrbisNetLinger)) {
|
if (optlen < sizeof(OrbisNetLinger)) {
|
||||||
LOG_ERROR(Lib_Net, "size missmatched! optlen = {} OrbisNetLinger={}", optlen,
|
LOG_ERROR(Lib_Net, "size missmatched! optlen = {} OrbisNetLinger={}", optlen,
|
||||||
@ -309,7 +310,7 @@ int PosixSocket::SetSocketOptions(int level, int optname, const void* optval, u3
|
|||||||
CASE_SETSOCKOPT_VALUE(ORBIS_NET_IP_MAXTTL, &sockopt_ip_maxttl);
|
CASE_SETSOCKOPT_VALUE(ORBIS_NET_IP_MAXTTL, &sockopt_ip_maxttl);
|
||||||
case ORBIS_NET_IP_HDRINCL: {
|
case ORBIS_NET_IP_HDRINCL: {
|
||||||
if (socket_type != ORBIS_NET_SOCK_RAW) {
|
if (socket_type != ORBIS_NET_SOCK_RAW) {
|
||||||
return ORBIS_NET_EPROCUNAVAIL;
|
return ORBIS_NET_ERROR_EPROCUNAVAIL;
|
||||||
}
|
}
|
||||||
return ConvertReturnErrorCode(
|
return ConvertReturnErrorCode(
|
||||||
setsockopt(sock, level, optname, (const char*)optval, optlen));
|
setsockopt(sock, level, optname, (const char*)optval, optlen));
|
||||||
@ -361,6 +362,7 @@ int PosixSocket::GetSocketOptions(int level, int optname, void* optval, u32* opt
|
|||||||
CASE_GETSOCKOPT(SO_ERROR);
|
CASE_GETSOCKOPT(SO_ERROR);
|
||||||
CASE_GETSOCKOPT(SO_TYPE);
|
CASE_GETSOCKOPT(SO_TYPE);
|
||||||
CASE_GETSOCKOPT_VALUE(ORBIS_NET_SO_NBIO, sockopt_so_nbio);
|
CASE_GETSOCKOPT_VALUE(ORBIS_NET_SO_NBIO, sockopt_so_nbio);
|
||||||
|
CASE_GETSOCKOPT_VALUE(ORBIS_NET_SO_CONNECTTIMEO, sockopt_so_connecttimeo);
|
||||||
CASE_GETSOCKOPT_VALUE(ORBIS_NET_SO_REUSEPORT, sockopt_so_reuseport);
|
CASE_GETSOCKOPT_VALUE(ORBIS_NET_SO_REUSEPORT, sockopt_so_reuseport);
|
||||||
CASE_GETSOCKOPT_VALUE(ORBIS_NET_SO_ONESBCAST, sockopt_so_onesbcast);
|
CASE_GETSOCKOPT_VALUE(ORBIS_NET_SO_ONESBCAST, sockopt_so_onesbcast);
|
||||||
CASE_GETSOCKOPT_VALUE(ORBIS_NET_SO_USECRYPTO, sockopt_so_usecrypto);
|
CASE_GETSOCKOPT_VALUE(ORBIS_NET_SO_USECRYPTO, sockopt_so_usecrypto);
|
||||||
|
@ -56,6 +56,7 @@ struct Socket {
|
|||||||
|
|
||||||
struct PosixSocket : public Socket {
|
struct PosixSocket : public Socket {
|
||||||
net_socket sock;
|
net_socket sock;
|
||||||
|
int sockopt_so_connecttimeo = 0;
|
||||||
int sockopt_so_reuseport = 0;
|
int sockopt_so_reuseport = 0;
|
||||||
int sockopt_so_onesbcast = 0;
|
int sockopt_so_onesbcast = 0;
|
||||||
int sockopt_so_usecrypto = 0;
|
int sockopt_so_usecrypto = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user