/*
* Copyright �2001 Novell, Inc. All Rights Reserved.
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
/*
* FILENAME : nw5sck.c
* DESCRIPTION : Socket related functions.
* Author : SGP
* Date : January 2001.
* Date Modified: June 26th 2001.
*/
#include "EXTERN.h"
#include "perl.h"
#include "nw5iop.h"
#include "nw5sck.h"
#include <fcntl.h>
#include <sys/stat.h>
// This is defined here since arpa\inet.h defines this array as an extern,
// and arpa\inet.h gets included by the inet_ntoa call.
char nwinet_scratch[18] = {'\0'};
u_long
nw_htonl(u_long hostlong)
{
return htonl(hostlong);
}
u_short
nw_htons(u_short hostshort)
{
return htons(hostshort);
}
u_long
nw_ntohl(u_long netlong)
{
return ntohl(netlong);
}
u_short
nw_ntohs(u_short netshort)
{
return ntohs(netshort);
}
SOCKET
nw_accept(SOCKET s, struct sockaddr *addr, int *addrlen)
{
return ((SOCKET)(accept(s, addr, addrlen)));
}
int
nw_bind(SOCKET s, const struct sockaddr *addr, int addrlen)
{
return ((int)bind(s, (struct sockaddr *)addr, addrlen));
}
int
nw_connect(SOCKET s, const struct sockaddr *addr, int addrlen)
{
return((int)connect(s, (struct sockaddr *)addr, addrlen));
}
void
nw_endhostent()
{
endhostent();
}
void
nw_endnetent()
{
endnetent();
}
void
nw_endprotoent()
{
endprotoent();
}
void
nw_endservent()
{
endservent();
}
struct hostent *
nw_gethostent()
{
return(gethostent());
}
struct netent *
nw_getnetent(void)
{
return ((struct netent *) getnetent());
}
struct protoent *
nw_getprotoent(void)
{
return ((struct protoent *) getprotoent());
}
struct hostent *
nw_gethostbyname(const char *name)
{
return(gethostbyname((char*)name));
}
int
nw_gethostname(char *name, int len)
{
return(gethostname(name, len));
}
struct hostent *
nw_gethostbyaddr(const char *addr, int len, int type)
{
return(gethostbyaddr((char*)addr, len, type));
}
struct netent *
nw_getnetbyaddr(long net, int type)
{
return(getnetbyaddr(net,type));
}
struct netent *
nw_getnetbyname(char *name)
{
return (struct netent *)getnetbyname(name);
}
int
nw_getpeername(SOCKET s, struct sockaddr *addr, int *addrlen)
{
return((int)getpeername(s, addr, addrlen));
}
struct protoent *
nw_getprotobyname(const char *name)
{
return ((struct protoent *)getprotobyname((char*)name));
}
struct protoent *
nw_getprotobynumber(int num)
{
return ((struct protoent *)getprotobynumber(num));
}
struct servent *
nw_getservbyname(const char *name, const char *proto)
{
return (struct servent *)getservbyname((char*)name, (char*)proto);
}
struct servent *
nw_getservbyport(int port, const char *proto)
{
return (struct servent *)getservbyport(port, (char*)proto);
}
struct servent *
nw_getservent(void)
{
return (struct servent *) getservent();
}
void
nw_sethostent(int stayopen)
{
#ifdef HAS_SETHOSTENT
sethostent(stayopen);
#endif
}
void
nw_setnetent(int stayopen)
{
#ifdef HAS_SETNETENT
setnetent(stayopen);
#endif
}
void
nw_setprotoent(int stayopen)
{
#ifdef HAS_SETPROTENT
setprotoent(stayopen);
#endif
}
void
nw_setservent(int stayopen)
{
#ifdef HAS_SETSERVENT
setservent(stayopen);
#endif
}
int
nw_setsockopt(SOCKET s, int level, int optname, const char* optval, int optlen)
{
return setsockopt(s, level, optname, (char*)optval, optlen);
}
int
nw_getsockname(SOCKET s, struct sockaddr *addr, int *addrlen)
{
return getsockname(s, addr, addrlen);
}
int
nw_getsockopt(SOCKET s, int level, int optname, char *optval, int *optlen)
{
return ((int)getsockopt(s, level, optname, optval, optlen));
}
unsigned long
nw_inet_addr(const char *cp)
{
return inet_addr((char*)cp);
}
char *
nw_inet_ntoa(struct in_addr in)
{
return inet_ntoa(in);
}
SOCKET
nw_socket(int af, int type, int protocol)
{
SOCKET s;
#ifndef USE_SOCKETS_AS_HANDLES
s = socket(af, type, protocol);
#else
if((s = socket(af, type, protocol)) == INVALID_SOCKET)
//errno = WSAGetLastError();
else
s = s;
#endif /* USE_SOCKETS_AS_HANDLES */
return s;
}
int
nw_listen(SOCKET s, int backlog)
{
return(listen(s, backlog));
}
int
nw_send(SOCKET s, const char *buf, int len, int flags)
{
return(send(s,(char*)buf,len,flags));
}
int
nw_recv(SOCKET s, char *buf, int len, int flags)
{
return (recv(s, buf, len, flags));
}
int
nw_sendto(SOCKET s, const char *buf, int len, int flags,
const struct sockaddr *to, int tolen)
{
return(sendto(s, (char*)buf, len, flags, (struct sockaddr *)to, tolen));
}
int
nw_recvfrom(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen)
{
int r;
int frombufsize = *fromlen;
r = recvfrom(s, buf, len, flags, from, fromlen);
//Not sure if the is required - chksgp
if (r && frombufsize == *fromlen)
(void)nw_getpeername(s, from, fromlen);
return r;
}
int
nw_select(int nfds, fd_set* rd, fd_set* wr, fd_set* ex, const struct timeval* timeout)
{
return(select(nfds, rd, wr, ex, (struct timeval*)timeout));
}
int
nw_shutdown(SOCKET s, int how)
{
return (shutdown(s, how));
}
|