This is accept.c in view mode; [Download] [Up]
#include "pthread_socket.h" #include "pthread_io_delay.h" extern void fd_init( void ); extern pthread_once_t io_initialized; static inline _syscall2(long,socketcall,int,call,unsigned long *,args); static int syscall_accept( int fd, struct sockaddr *addr, int *addrlen ) { unsigned long args[3]; int ret; args[0] = (unsigned long)fd; args[1] = (unsigned long) addr; args[2] = (unsigned long) addrlen; LOCK_ON ret = socketcall( SYS_ACCEPT, args ); LOCK_OFF return( ret ); } /*-------------------------------------------------------------------------- * @@ A C C E P T *-------------------------------------------------------------------------*/ int accept( int fd, struct sockaddr *addr, int *addrlen ) { int ret, err, st; st = pthread_once( &io_initialized, fd_init ); if( st != SUCCESS ) return( NOTOK ); if( nonblock_is_set( fd )) { ret = syscall_accept( fd, addr, addrlen ); RETURN( ret ); } set_fd_nonblock( fd ); while( (ret = syscall_accept( fd, addr, addrlen )) < OK ) { (void) pthread_get_errno_np( NULL, &err ); if( err != EWOULDBLOCK ) break; pthread_delay_np( &delay_interval ); } clear_fd_nonblock( fd ); return( ret ); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.