mirror of
https://github.com/solemnwarning/ipxwrapper
synced 2024-12-30 16:45:37 +01:00
Implemented listen function.
This commit is contained in:
parent
0819a324c1
commit
b408f4e4e9
@ -18,3 +18,4 @@ EXPORTS
|
|||||||
connect
|
connect
|
||||||
send
|
send
|
||||||
getpeername
|
getpeername
|
||||||
|
listen
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
#define IPX_EXT_ADDR (int)(1<<9)
|
#define IPX_EXT_ADDR (int)(1<<9)
|
||||||
#define IPX_IS_SPX (int)(1<<10)
|
#define IPX_IS_SPX (int)(1<<10)
|
||||||
#define IPX_IS_SPXII (int)(1<<11)
|
#define IPX_IS_SPXII (int)(1<<11)
|
||||||
|
#define IPX_LISTENING (int)(1<<12)
|
||||||
|
|
||||||
typedef struct ipx_socket ipx_socket;
|
typedef struct ipx_socket ipx_socket;
|
||||||
typedef struct ipx_packet ipx_packet;
|
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_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_send(SOCKET fd, const char *buf, int len, int flags);
|
||||||
int PASCAL r_getpeername(SOCKET fd, struct sockaddr *addr, int *addrlen);
|
int PASCAL r_getpeername(SOCKET fd, struct sockaddr *addr, int *addrlen);
|
||||||
|
int PASCAL r_listen(SOCKET s, int backlog);
|
||||||
|
|
||||||
#endif /* !IPXWRAPPER_H */
|
#endif /* !IPXWRAPPER_H */
|
||||||
|
@ -8,7 +8,7 @@ ntohl:4
|
|||||||
htons:4
|
htons:4
|
||||||
ntohs:4
|
ntohs:4
|
||||||
select:4
|
select:4
|
||||||
listen:4
|
r_listen:4
|
||||||
accept:4
|
accept:4
|
||||||
send:4
|
send:4
|
||||||
connect:4
|
connect:4
|
||||||
|
@ -1307,3 +1307,52 @@ int PASCAL getpeername(SOCKET fd, struct sockaddr *addr, int *addrlen)
|
|||||||
return r_getpeername(fd, addr, 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -10,7 +10,7 @@ htons
|
|||||||
inet_addr
|
inet_addr
|
||||||
inet_ntoa
|
inet_ntoa
|
||||||
ioctlsocket:0
|
ioctlsocket:0
|
||||||
listen
|
listen:0
|
||||||
ntohl
|
ntohl
|
||||||
ntohs
|
ntohs
|
||||||
recv:0
|
recv:0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user