err = OTInstallNotifier(endpointRef, NOTIFIER_ROUTINE, fd->secret);
err = OTInstallNotifier(endpointRef, NotifierRoutineUPP, fd->secret);
void _MD_makenonblock(PRFileDesc *fd){	// We simulate non-blocking mode using async mode rather	// than put the endpoint in non-blocking mode.	// We need to install the PRFileDesc as the contextPtr for the NotifierRoutine, but it	// didn't exist at the time the endpoint was created.  It does now though...	ProviderRef	endpointRef = (ProviderRef)fd->secret->md.osfd;	OSStatus	err;		// Install fd->secret as the contextPtr for the Notifier function associated with this 	// endpoint. We use this instead of the fd itself because:	//            (a) in cases where you import I/O layers, the containing 	//                fd changes, but the secret structure does not;	//            (b) the notifier func refers only to the secret data structure	//                anyway.	err = OTInstallNotifier(endpointRef, NOTIFIER_ROUTINE, fd->secret);	PR_ASSERT(err == kOTNoError);		// Now that we have a NotifierRoutine installed, we can make the endpoint asynchronous	err = OTSetAsynchronous(endpointRef);	PR_ASSERT(err == kOTNoError);}