This is connect.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_connect( 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_CONNECT, args ); LOCK_OFF return( ret ); } /*-------------------------------------------------------------------------- * @@ C O N N E C T *-------------------------------------------------------------------------*/ int connect( 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_connect( fd, addr, addrlen ); RETURN( ret ); } set_fd_nonblock( fd ); while( (ret = syscall_connect( fd, addr, addrlen )) < OK ) { (void) pthread_get_errno_np( NULL, &err ); if( err != EINPROGRESS ) /* All others use 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.