/* * @implemented */ INT WSAAPI WSANtohs(IN SOCKET s, IN USHORT netshort, OUT USHORT FAR* lphostshort) { INT ErrorCode; PWSSOCKET Socket; DPRINT("WSANtohs: %p, %lx, %p\n", s, netshort, lphostshort); /* Check for WSAStartup */ if ((ErrorCode = WsQuickProlog()) == ERROR_SUCCESS) { /* Make sure we got a parameter */ if (!lphostshort) { /* Fail */ SetLastError(WSAEFAULT); return SOCKET_ERROR; } /* Get the Socket Context */ if ((Socket = WsSockGetSocket(s))) { /* Check which byte order to use */ if (Socket->CatalogEntry->ProtocolInfo.iNetworkByteOrder == LITTLEENDIAN) { /* No conversion needed */ *lphostshort = netshort; } else { /* Use a swap */ *lphostshort = WN2H(netshort); } /* Dereference the socket */ WsSockDereference(Socket); /* Return success */ return ERROR_SUCCESS; } else { /* Set the error code */ ErrorCode = WSAENOTSOCK; } } /* Return with error */ SetLastError(ErrorCode); return SOCKET_ERROR; }
/* * @implemented */ INT WSAAPI WSAConnect(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen, IN LPWSABUF lpCallerData, OUT LPWSABUF lpCalleeData, IN LPQOS lpSQOS, IN LPQOS lpGQOS) { PWSSOCKET Socket; INT Status; INT ErrorCode; DPRINT("WSAConnect: %lx, %lx, %lx, %p\n", s, name, namelen, lpCallerData); /* Check for WSAStartup */ if ((ErrorCode = WsQuickProlog()) == ERROR_SUCCESS) { /* Get the Socket Context */ if ((Socket = WsSockGetSocket(s))) { /* Make the call */ Status = Socket->Provider->Service.lpWSPConnect(s, name, namelen, lpCallerData, lpCalleeData, lpSQOS, lpGQOS, &ErrorCode); /* Deference the Socket Context */ WsSockDereference(Socket); /* Return Provider Value */ if (Status == ERROR_SUCCESS) return Status; /* If everything seemed fine, then the WSP call failed itself */ if (ErrorCode == NO_ERROR) ErrorCode = WSASYSCALLFAILURE; } else { /* No Socket Context Found */ ErrorCode = WSAENOTSOCK; } } /* Return with an Error */ SetLastError(ErrorCode); return SOCKET_ERROR; }
/* * @implemented */ INT WSAAPI closesocket(IN SOCKET s) { PWSSOCKET Socket; INT Status; INT ErrorCode; DPRINT("closesocket: %lx\n", s); /* Check for WSAStartup */ if ((ErrorCode = WsQuickProlog()) == ERROR_SUCCESS) { /* Get the Socket Context */ if ((Socket = WsSockGetSocket(s))) { /* Make the call */ Status = Socket->Provider->Service.lpWSPCloseSocket(s, &ErrorCode); /* Check if this is a provider socket */ if ((Status == ERROR_SUCCESS) && (Socket->IsProvider)) { /* Disassociate the handle */ if (WsSockDisassociateHandle(Socket) == ERROR_SUCCESS) { /* Deference the Socket Context */ WsSockDereference(Socket); } /* Remove the last reference */ WsSockDereference(Socket); /* Return success if everything is OK */ if (ErrorCode == ERROR_SUCCESS) return ErrorCode; } } else { /* No Socket Context Found */ ErrorCode = WSAENOTSOCK; } } /* Return with an Error */ SetLastError(ErrorCode); return SOCKET_ERROR; }
/* * @implemented */ INT WSAAPI getsockname(IN SOCKET s, OUT LPSOCKADDR name, IN OUT INT FAR* namelen) { PWSSOCKET Socket; INT Status; INT ErrorCode; DPRINT("getsockname: %lx, %p, %lx\n", s, name, namelen); /* Check for WSAStartup */ if ((ErrorCode = WsQuickProlog()) == ERROR_SUCCESS) { /* Get the Socket Context */ if ((Socket = WsSockGetSocket(s))) { /* Make the call */ Status = Socket->Provider->Service.lpWSPGetSockName(s, name, namelen, &ErrorCode); /* Deference the Socket Context */ WsSockDereference(Socket); /* Return Provider Value */ if (Status == ERROR_SUCCESS) return Status; /* If everything seemed fine, then the WSP call failed itself */ if (ErrorCode == NO_ERROR) ErrorCode = WSASYSCALLFAILURE; } else { /* No Socket Context Found */ ErrorCode = WSAENOTSOCK; } } /* Return with an Error */ SetLastError(ErrorCode); return SOCKET_ERROR; }
/* * @implemented */ BOOL WSAAPI WSAGetOverlappedResult(IN SOCKET s, IN LPWSAOVERLAPPED lpOverlapped, OUT LPDWORD lpcbTransfer, IN BOOL fWait, OUT LPDWORD lpdwFlags) { PWSSOCKET Socket; INT Status; INT ErrorCode; DPRINT("WSAGetOverlappedResult: %lx, %lx\n", s, lpOverlapped); /* Check for WSAStartup */ if ((ErrorCode = WsQuickProlog()) == ERROR_SUCCESS) { /* Get the Socket Context */ if ((Socket = WsSockGetSocket(s))) { /* Make the call */ Status = Socket->Provider->Service.lpWSPGetOverlappedResult(s, lpOverlapped, lpcbTransfer, fWait, lpdwFlags, &ErrorCode); /* Deference the Socket Context */ WsSockDereference(Socket); /* Return Provider Value */ if (Status) return Status; } else { /* No Socket Context Found */ ErrorCode = WSAENOTSOCK; } } /* Return with an Error */ SetLastError(ErrorCode); return FALSE; }
/* * @implemented */ BOOL WSAAPI WSAGetQOSByName(IN SOCKET s, IN OUT LPWSABUF lpQOSName, OUT LPQOS lpQOS) { PWSSOCKET Socket; INT Status; INT ErrorCode; DPRINT("WSAGetQOSByName: %lx, %p\n", s, lpQOSName); /* Check for WSAStartup */ if ((ErrorCode = WsQuickProlog()) == ERROR_SUCCESS) { /* Get the Socket Context */ if ((Socket = WsSockGetSocket(s))) { /* Make the call */ Status = Socket->Provider->Service.lpWSPGetQOSByName(s, lpQOSName, lpQOS, &ErrorCode); /* Deference the Socket Context */ WsSockDereference(Socket); /* Return Provider Value */ if (Status == ERROR_SUCCESS) return Status; /* If everything seemed fine, then the WSP call failed itself */ if (ErrorCode == NO_ERROR) ErrorCode = WSASYSCALLFAILURE; } else { /* No Socket Context Found */ ErrorCode = WSAENOTSOCK; } } /* Return with an Error */ SetLastError(ErrorCode); return FALSE; }
/* * @implemented */ INT WSAAPI WSADuplicateSocketW(IN SOCKET s, IN DWORD dwProcessId, OUT LPWSAPROTOCOL_INFOW lpProtocolInfo) { PWSSOCKET Socket; INT Status; INT ErrorCode; DPRINT("WSADuplicateSocketW: %lx, %lx, %p\n", s, dwProcessId, lpProtocolInfo); /* Check for WSAStartup */ if ((ErrorCode = WsQuickProlog()) == ERROR_SUCCESS) { /* Get the Socket Context */ if ((Socket = WsSockGetSocket(s))) { /* Make the call */ Status = Socket->Provider->Service.lpWSPDuplicateSocket(s, dwProcessId, lpProtocolInfo, &ErrorCode); /* Deference the Socket Context */ WsSockDereference(Socket); /* Return Provider Value */ if (Status == ERROR_SUCCESS) return Status; /* If everything seemed fine, then the WSP call failed itself */ if (ErrorCode == NO_ERROR) ErrorCode = WSASYSCALLFAILURE; } else { /* No Socket Context Found */ ErrorCode = WSAENOTSOCK; } } /* Return with an Error */ SetLastError(ErrorCode); return SOCKET_ERROR; }
/* * @implemented */ INT WSAAPI listen(IN SOCKET s, IN INT backlog) { PWSSOCKET Socket; INT Status; INT ErrorCode; DPRINT("connect: %lx, %lx\n", s, backlog); /* Check for WSAStartup */ if ((ErrorCode = WsQuickProlog()) == ERROR_SUCCESS) { /* Get the Socket Context */ if ((Socket = WsSockGetSocket(s))) { /* Make the call */ Status = Socket->Provider->Service.lpWSPListen(s, backlog, &ErrorCode); /* Deference the Socket Context */ WsSockDereference(Socket); /* Return Provider Value */ if (Status == ERROR_SUCCESS) return Status; /* If everything seemed fine, then the WSP call failed itself */ if (ErrorCode == NO_ERROR) ErrorCode = WSASYSCALLFAILURE; } else { /* No Socket Context Found */ ErrorCode = WSAENOTSOCK; } } /* Return with an Error */ SetLastError(ErrorCode); return SOCKET_ERROR; }
/* * @implemented */ INT WSAAPI WSAEnumNetworkEvents(IN SOCKET s, IN WSAEVENT hEventObject, OUT LPWSANETWORKEVENTS lpNetworkEvents) { PWSSOCKET Socket; INT Status; INT ErrorCode; DPRINT("WSAEnumNetworkEvents: %lx\n", s); /* Check for WSAStartup */ if ((ErrorCode = WsQuickProlog()) == ERROR_SUCCESS) { /* Get the Socket Context */ if ((Socket = WsSockGetSocket(s))) { /* Make the call */ Status = Socket->Provider->Service.lpWSPEnumNetworkEvents(s, hEventObject, lpNetworkEvents, &ErrorCode); /* Deference the Socket Context */ WsSockDereference(Socket); /* Return Provider Value */ if (Status == ERROR_SUCCESS) return Status; } else { /* No Socket Context Found */ ErrorCode = WSAENOTSOCK; } } /* Return with an Error */ SetLastError(ErrorCode); return SOCKET_ERROR; }