PRInt32 _nt_nonblock_recv(PRFileDesc *fd, char *buf, int len, PRIntervalTime);
PRInt32 _nt_nonblock_recv(PRFileDesc *fd, char *buf, int len, int flags, PRIntervalTime);
__declspec(thread) PRThread *_pr_io_restarted_io = NULL;DWORD _pr_io_restartedIOIndex;  /* The thread local storage slot for each                                 * thread is initialized to NULL. */PRBool                       _nt_version_gets_lockfile_completion;struct _MDLock               _pr_ioq_lock;extern _MDLock               _nt_idleLock;extern PRCList               _nt_idleList;extern PRUint32              _nt_idleCount;#define CLOSE_TIMEOUT   PR_SecondsToInterval(5)/* * NSPR-to-NT access right mapping table for files. */static DWORD fileAccessTable[] = {    FILE_GENERIC_READ,    FILE_GENERIC_WRITE,    FILE_GENERIC_EXECUTE};/* * NSPR-to-NT access right mapping table for directories. */static DWORD dirAccessTable[] = {    FILE_GENERIC_READ,    FILE_GENERIC_WRITE|FILE_DELETE_CHILD,    FILE_GENERIC_EXECUTE};/* * The NSPR epoch (00:00:00 1 Jan 1970 UTC) in FILETIME. * We store the value in a PRTime variable for convenience. * This constant is used by _PR_FileTimeToPRTime(). */static const PRTime _pr_filetime_offset = 116444736000000000i64;#define _NEED_351_FILE_LOCKING_HACK#ifdef _NEED_351_FILE_LOCKING_HACK#define _PR_LOCAL_FILE 1#define _PR_REMOTE_FILE 2PRBool IsFileLocalInit();PRInt32 IsFileLocal(HANDLE hFile);#endif /* _NEED_351_FILE_LOCKING_HACK */static PRInt32 _md_MakeNonblock(HANDLE);PRInt32 _nt_nonblock_accept(PRFileDesc *fd, struct sockaddr_in *addr, int *len, PRIntervalTime);PRInt32 _nt_nonblock_recv(PRFileDesc *fd, char *buf, int len, PRIntervalTime);PRInt32 _nt_nonblock_send(PRFileDesc *fd, char *buf, int len, PRIntervalTime);PRInt32 _nt_nonblock_writev(PRFileDesc *fd, const PRIOVec *iov, int size, PRIntervalTime);PRInt32 _nt_nonblock_sendto(PRFileDesc *, const char *, int, const struct sockaddr *, int, PRIntervalTime);PRInt32 _nt_nonblock_recvfrom(PRFileDesc *, char *, int, struct sockaddr *, int *, PRIntervalTime);/* * UDP support *  * UDP is supported on NT by the continuation thread mechanism. * The code is borrowed from ptio.c in pthreads nspr, hence the * PT and pt prefixes.  This mechanism is in fact general and * not limited to UDP.  For now, only UDP's recvfrom and sendto * go through the continuation thread if they get WSAEWOULDBLOCK * on first try.  Recv and send on a connected UDP socket still * goes through asychronous io. */#define PT_DEFAULT_SELECT_MSEC 100typedef struct pt_Continuation pt_Continuation;typedef PRBool (*ContinuationFn)(pt_Continuation *op, PRInt16 revent);typedef enum pr_ContuationStatus{    pt_continuation_sumbitted,    pt_continuation_inprogress,    pt_continuation_abort,    pt_continuation_done} pr_ContuationStatus;