BOOL TrySAN;
SOCKADDR WSLocalAddress;
SOCKADDR WSRemoteAddress;
+ struct _SOCKET_INFORMATION *NextSocket;
} SOCKET_INFORMATION, *PSOCKET_INFORMATION;
WSPAPI
WSPSelect(
IN INT nfds,
- IN OUT LPFD_SET readfds,
- IN OUT LPFD_SET writefds,
- IN OUT LPFD_SET exceptfds,
- IN CONST LPTIMEVAL timeout,
+ IN OUT fd_set *readfds,
+ IN OUT fd_set *writefds,
+ IN OUT fd_set *exceptfds,
+ IN CONST struct timeval *timeout,
OUT LPINT lpErrno);
INT
SOCKET Handle
);
+INT TranslateNtStatusError( NTSTATUS Status );
+
VOID DeleteSocketStructure( SOCKET Handle );
int GetSocketInformation(
IN PSOCKET_INFORMATION Socket,
IN ULONG Event
);
-
-DWORD MsafdReturnWithErrno( NTSTATUS Status, LPINT Errno, DWORD Received,
- LPDWORD ReturnedBytes );
typedef VOID (*PASYNC_COMPLETION_ROUTINE)(PVOID Context, PIO_STATUS_BLOCK IoStatusBlock);
+
+DWORD
+FORCEINLINE
+MsafdReturnWithErrno(NTSTATUS Status,
+ LPINT Errno,
+ DWORD Received,
+ LPDWORD ReturnedBytes)
+{
+ if (Errno)
+ {
+ *Errno = TranslateNtStatusError(Status);
+
+ if (ReturnedBytes)
+ *ReturnedBytes = (*Errno == 0) ? Received : 0;
+
+ return (*Errno == 0) ? 0 : SOCKET_ERROR;
+ }
+ else
+ {
+ DbgPrint("%s: Received invalid lpErrno pointer!\n", __FUNCTION__);
+
+ if (ReturnedBytes)
+ *ReturnedBytes = (Status == STATUS_SUCCESS) ? Received : 0;
+
+ return (Status == STATUS_SUCCESS) ? 0 : SOCKET_ERROR;
+ }
+}
#endif /* __MSAFD_H */