1
0
mirror of https://github.com/solemnwarning/ipxwrapper synced 2024-12-30 16:45:37 +01:00

Cleaned up socket()

This commit is contained in:
Daniel Collins 2011-04-24 17:40:25 +00:00
parent 53346c2536
commit 8f4a5e1c6f
2 changed files with 6 additions and 18 deletions

View File

@ -40,16 +40,6 @@
#define IPX_SEND (int)(1<<3) #define IPX_SEND (int)(1<<3)
#define IPX_RECV (int)(1<<4) #define IPX_RECV (int)(1<<4)
#define INIT_SOCKET(ptr) \
(ptr)->fd = -1;\
(ptr)->flags = IPX_SEND | IPX_RECV;\
(ptr)->s_ptype = 0;\
(ptr)->f_ptype = 0;\
memset((ptr)->netnum, 0, 4);\
memset((ptr)->nodenum, 0, 6);\
(ptr)->socket = 0;\
(ptr)->next = NULL;
#define RETURN(...) \ #define RETURN(...) \
unlock_mutex();\ unlock_mutex();\
return __VA_ARGS__; return __VA_ARGS__;
@ -94,7 +84,7 @@ struct ipx_socket {
int flags; int flags;
uint8_t s_ptype; uint8_t s_ptype;
uint8_t f_ptype; uint8_t f_ptype; /* Undefined when IPX_FILTER isn't set */
/* The following values are undefined when IPX_BOUND is not set */ /* The following values are undefined when IPX_BOUND is not set */
unsigned char netnum[4]; unsigned char netnum[4];

View File

@ -174,26 +174,24 @@ SOCKET WSAAPI socket(int af, int type, int protocol) {
RETURN_WSA(ERROR_OUTOFMEMORY, -1); RETURN_WSA(ERROR_OUTOFMEMORY, -1);
} }
INIT_SOCKET(nsock);
nsock->fd = r_socket(AF_INET, SOCK_DGRAM, 0); nsock->fd = r_socket(AF_INET, SOCK_DGRAM, 0);
if(nsock->fd == -1) { if(nsock->fd == -1) {
debug("...failed: %s", w32_error(WSAGetLastError())); debug("Creating fake socket failed: %s", w32_error(WSAGetLastError()));
free(nsock); free(nsock);
RETURN(-1); RETURN(-1);
} }
if(protocol) { nsock->flags = IPX_SEND | IPX_RECV;
nsock->s_ptype = NSPROTO_IPX - protocol; nsock->s_ptype = (protocol ? nsock->s_ptype = NSPROTO_IPX - protocol : 0);
}
lock_mutex(); lock_mutex();
nsock->next = sockets; nsock->next = sockets;
sockets = nsock; sockets = nsock;
debug("...success: fd=%d", nsock->fd); debug("Socket created (fd=%d)", nsock->fd);
RETURN(nsock->fd); RETURN(nsock->fd);
}else{ }else{
return r_socket(af, type, protocol); return r_socket(af, type, protocol);