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

Implemented listen function.

This commit is contained in:
Daniel Collins 2014-01-05 21:46:59 +00:00
parent 0819a324c1
commit b408f4e4e9
5 changed files with 54 additions and 2 deletions

View File

@ -18,3 +18,4 @@ EXPORTS
connect
send
getpeername
listen

View File

@ -43,6 +43,7 @@
#define IPX_EXT_ADDR (int)(1<<9)
#define IPX_IS_SPX (int)(1<<10)
#define IPX_IS_SPXII (int)(1<<11)
#define IPX_LISTENING (int)(1<<12)
typedef struct ipx_socket ipx_socket;
typedef struct ipx_packet ipx_packet;
@ -109,5 +110,6 @@ int PASCAL r_ioctlsocket(SOCKET fd, long cmd, u_long *argp);
int PASCAL r_connect(SOCKET fd, const struct sockaddr *addr, int addrlen);
int PASCAL r_send(SOCKET fd, const char *buf, int len, int flags);
int PASCAL r_getpeername(SOCKET fd, struct sockaddr *addr, int *addrlen);
int PASCAL r_listen(SOCKET s, int backlog);
#endif /* !IPXWRAPPER_H */

View File

@ -8,7 +8,7 @@ ntohl:4
htons:4
ntohs:4
select:4
listen:4
r_listen:4
accept:4
send:4
connect:4

View File

@ -1307,3 +1307,52 @@ int PASCAL getpeername(SOCKET fd, struct sockaddr *addr, int *addrlen)
return r_getpeername(fd, addr, addrlen);
}
}
int PASCAL listen(SOCKET s, int backlog)
{
ipx_socket *sock = get_socket(s);
if(sock)
{
if(sock->flags & IPX_IS_SPX)
{
if(!(sock->flags & IPX_BOUND))
{
unlock_sockets();
WSASetLastError(WSAEINVAL);
return -1;
}
if(sock->flags & IPX_LISTENING)
{
unlock_sockets();
WSASetLastError(WSAEISCONN);
return -1;
}
if(r_listen(sock->fd, backlog) == -1)
{
unlock_sockets();
return -1;
}
sock->flags |= IPX_LISTENING;
unlock_sockets();
return 0;
}
else{
unlock_sockets();
WSASetLastError(WSAEOPNOTSUPP);
return -1;
}
}
else{
return r_listen(s, backlog);
}
}

View File

@ -10,7 +10,7 @@ htons
inet_addr
inet_ntoa
ioctlsocket:0
listen
listen:0
ntohl
ntohs
recv:0