167 lines
3.4 KiB
C
167 lines
3.4 KiB
C
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
sockmisc.c
|
|
|
|
Abstract:
|
|
|
|
Miscellaneous Winsock functions:
|
|
htonl
|
|
htons
|
|
ntohl
|
|
ntohs
|
|
inet_addr
|
|
inet_ntoa
|
|
WSAGetLastError
|
|
WSASetLastError
|
|
WSACreateEvent
|
|
WSACloseEvent
|
|
WSASetEvent
|
|
WSAResetEvent
|
|
WSAWaitForMultipleEvents
|
|
__WSAFDIsSet
|
|
|
|
Revision History:
|
|
|
|
05/30/2000 davidx
|
|
Created it.
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
|
|
|
|
//
|
|
// Converts a u_long from host to network byte order
|
|
//
|
|
u_long WSAAPI htonl(IN u_long hostlong) {
|
|
return HTONL(hostlong);
|
|
}
|
|
|
|
//
|
|
// Converts a u_short from host to network byte order
|
|
//
|
|
u_short WSAAPI htons(IN u_short hostshort) {
|
|
return HTONS(hostshort);
|
|
}
|
|
|
|
//
|
|
// Converts a u_long from network order to host byte order
|
|
//
|
|
u_long WSAAPI ntohl(IN u_long netlong) {
|
|
return NTOHL(netlong);
|
|
}
|
|
|
|
//
|
|
// Converts a u_short from network byte order to host byte order
|
|
//
|
|
u_short WSAAPI ntohs(IN u_short netshort) {
|
|
return NTOHS(netshort);
|
|
}
|
|
|
|
//
|
|
// Converts a string containing an (Ipv4) Internet Protocol
|
|
// dotted address into a proper address for the IN_ADDR structure.
|
|
//
|
|
unsigned long WSAAPI inet_addr(IN const char* cp) {
|
|
IPADDR addr;
|
|
|
|
WinsockApiPrologLight_(inet_addr);
|
|
WinsockApiParamCheck_(cp != NULL);
|
|
|
|
return IpAddrFromString(cp, &addr) ? addr : INADDR_NONE;
|
|
}
|
|
|
|
//
|
|
// Converts an (Ipv4) Internet network address into
|
|
// a string in Internet standard dotted format.
|
|
//
|
|
char* WSAAPI inet_ntoa(IN struct in_addr in) {
|
|
WinsockApiProlog_(inet_ntoa, NULL);
|
|
|
|
if (!SockAllocThreadbuf(&tlsData->strbuf, 16)) {
|
|
WinsockApiReturnError_(WSAENOBUFS, NULL);
|
|
}
|
|
|
|
return IpAddrToString(in.s_addr, tlsData->strbuf.data, tlsData->strbuf.size);
|
|
}
|
|
|
|
//
|
|
// Gets the error status for the last operation that failed
|
|
//
|
|
int WSAAPI WSAGetLastError() {
|
|
return GetLastError();
|
|
}
|
|
|
|
//
|
|
// Sets the error code that can be retrieved
|
|
// through the WSAGetLastError function
|
|
//
|
|
void WSAAPI WSASetLastError(IN int error) {
|
|
SetLastError(error);
|
|
}
|
|
|
|
//
|
|
// Creates a new event object
|
|
//
|
|
WSAEVENT WSAAPI WSACreateEvent() {
|
|
return CreateEvent(NULL, TRUE, FALSE, NULL);
|
|
}
|
|
|
|
//
|
|
// Closes an open event object handle
|
|
//
|
|
BOOL WSAAPI WSACloseEvent(IN WSAEVENT hEvent) {
|
|
return CloseHandle(hEvent);
|
|
}
|
|
|
|
//
|
|
// Sets the state of the specified event object to signaled
|
|
//
|
|
BOOL WSAAPI WSASetEvent(IN WSAEVENT hEvent) {
|
|
return SetEvent(hEvent);
|
|
}
|
|
|
|
//
|
|
// Resets the state of the specified event object to nonsignaled
|
|
//
|
|
BOOL WSAAPI WSAResetEvent(IN WSAEVENT hEvent) {
|
|
return ResetEvent(hEvent);
|
|
}
|
|
|
|
//
|
|
// Returns either when one or all of the specified event objects
|
|
// are in the signaled state, or when the time-out interval expires
|
|
//
|
|
DWORD WSAAPI
|
|
WSAWaitForMultipleEvents(
|
|
IN DWORD cEvents,
|
|
IN const WSAEVENT* lphEvents,
|
|
IN BOOL fWaitAll,
|
|
IN DWORD dwTimeout,
|
|
IN BOOL fAlertable
|
|
)
|
|
{
|
|
return WaitForMultipleObjectsEx(
|
|
cEvents,
|
|
lphEvents,
|
|
fWaitAll,
|
|
dwTimeout,
|
|
fAlertable);
|
|
}
|
|
|
|
//
|
|
// Determines if a specific socket is a contained in an FD_SET
|
|
//
|
|
int WSAAPI __WSAFDIsSet(SOCKET fd, fd_set* set) {
|
|
int i = (set->fd_count & 0xffff);
|
|
while (i--){
|
|
if (set->fd_array[i] == fd) return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|