Create socket_create

This commit is contained in:
twinaphex 2016-05-02 18:37:08 +02:00
parent 0badc3ffd2
commit 62508eca77
3 changed files with 79 additions and 4 deletions

View File

@ -31,10 +31,16 @@
RETRO_BEGIN_DECLS
enum socket_domain
{
SOCKET_DOMAIN_INET = 0
};
enum socket_type
{
SOCKET_TYPE_DATAGRAM = 0,
SOCKET_TYPE_STREAM
SOCKET_TYPE_STREAM,
SOCKET_TYPE_SEQPACKET
};
int socket_init(void **address, uint16_t port, const char *server, enum socket_type type);
@ -57,6 +63,8 @@ bool socket_bind(int fd, void *data);
int socket_connect(int fd, void *data, bool timeout_enable);
int socket_create(const char *name, enum socket_domain domain_type, enum socket_type socket_type, int protocol);
RETRO_END_DECLS
#endif

View File

@ -49,6 +49,9 @@ int socket_init(void **address, uint16_t port, const char *server, enum socket_t
case SOCKET_TYPE_STREAM:
hints.ai_socktype = SOCK_STREAM;
break;
case SOCKET_TYPE_SEQPACKET:
/* TODO/FIXME - implement? */
break;
}
if (!server)
@ -211,3 +214,60 @@ int socket_connect(int fd, void *data, bool timeout_enable)
return connect(fd, addr->ai_addr, addr->ai_addrlen);
}
int socket_create(
const char *name,
enum socket_domain domain_type,
enum socket_type socket_type,
int protocol)
{
#ifdef VITA
int type = 0;
int domain = 0;
switch (domain_type)
{
case SOCKET_DOMAIN_INET:
domain = PSP2_NET_AF_INET;
break;
}
switch (socket_type)
{
case SOCKET_TYPE_DATAGRAM:
type = PSP2_NET_SOCK_DGRAM;
break;
case SOCKET_TYPE_STREAM:
type = PSP2_NET_SOCK_STREAM;
break;
case SOCKET_TYPE_SEQPACKET:
/* TODO/FIXME - implement */
break;
}
return sceNetSocket(name, domain, type, protocol);
#else
int type = 0;
int domain = 0;
switch (domain_type)
{
case SOCKET_DOMAIN_INET:
domain = AF_INET;
break;
}
switch (socket_type)
{
case SOCKET_TYPE_DATAGRAM:
type = SOCK_DGRAM;
break;
case SOCKET_TYPE_STREAM:
type = SOCK_STREAM;
break;
case SOCKET_TYPE_SEQPACKET:
/* TODO/FIXME - implement */
break;
}
return socket(domain, type, protocol);
#endif
}

View File

@ -63,8 +63,11 @@ static int network_interface_up(struct sockaddr_in *target, int index,
sceNetInit(&initparam);
}
*s = sceNetSocket("RA_netlogger",
PSP2_NET_AF_INET, PSP2_NET_SOCK_DGRAM, 0);
*s = socket_create(
"ra_netlogger",
SOCKET_DOMAIN_INET,
SOCKET_TYPE_DATAGRAM,
0);
target->sin_family = PSP2_NET_AF_INET;
target->sin_port = sceNetHtons(udp_port);
@ -101,7 +104,11 @@ static int network_interface_up(struct sockaddr_in *target, int index,
if (ret < 0)
return -1;
*s = socket(AF_INET, SOCK_DGRAM, 0);
*s = socket_create(
"ra_netlogger",
SOCKET_DOMAIN_INET,
SOCKET_TYPE_DATAGRAM,
0);
target->sin_family = AF_INET;
target->sin_port = htons(udp_port);