diff --git a/src/ipxwrapper.def b/src/ipxwrapper.def index 7d14aaf..5dd4bec 100644 --- a/src/ipxwrapper.def +++ b/src/ipxwrapper.def @@ -16,3 +16,4 @@ EXPORTS ioctlsocket WSHEnumProtocols connect + send diff --git a/src/ipxwrapper.h b/src/ipxwrapper.h index 05ef455..ca5a8da 100644 --- a/src/ipxwrapper.h +++ b/src/ipxwrapper.h @@ -130,5 +130,6 @@ int WSAAPI r_shutdown(SOCKET,int); SOCKET WSAAPI r_socket(int,int,int); 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); #endif /* !IPXWRAPPER_H */ diff --git a/src/ipxwrapper_stubs.txt b/src/ipxwrapper_stubs.txt index 8b726dc..22a3b05 100644 --- a/src/ipxwrapper_stubs.txt +++ b/src/ipxwrapper_stubs.txt @@ -32,3 +32,4 @@ r_shutdown:4 r_socket:4 r_ioctlsocket:4 r_connect:4 +r_send:4 diff --git a/src/winsock.c b/src/winsock.c index 92b60d7..9c67f83 100644 --- a/src/winsock.c +++ b/src/winsock.c @@ -802,3 +802,18 @@ int PASCAL connect(SOCKET fd, const struct sockaddr *addr, int addrlen) { return r_connect(fd, addr, addrlen); } } + +int PASCAL send(SOCKET fd, const char *buf, int len, int flags) { + ipx_socket *sockptr = get_socket(fd); + + if(sockptr) { + if(!(sockptr->flags & IPX_CONNECTED)) { + RETURN_WSA(WSAENOTCONN, -1); + } + + int ret = sendto(fd, buf, len, 0, (struct sockaddr*)&(sockptr->remote_addr), sizeof(struct sockaddr_ipx)); + RETURN(ret); + }else{ + return r_send(fd, buf, len, flags); + } +} diff --git a/src/wsock32_stubs.txt b/src/wsock32_stubs.txt index 0c463c3..73f9f2f 100644 --- a/src/wsock32_stubs.txt +++ b/src/wsock32_stubs.txt @@ -16,7 +16,7 @@ ntohs recv:0 recvfrom:0 select -send +send:0 sendto:0 setsockopt:0 shutdown:0