[comp.sys.mac.programmer] MacTCP Initialization

gert@uvabick.UUCP (Gert Hulstein) (07/20/89)

I just started playing with MacTCP and found that the first call to
PBOpen for the ".ipp" driver takes a long time (>30 secs) with lots
of Disk access. This hapens every time After the machine is restarted.
Anybody know what it's doing, and how to avoid it ?

Gert Hulstein, University of Amsterdam.
gert@uvabick.uucp

Below a MPW Code segment that I used :

#include <Files.h>
#include <Devices.h>
#include "MacTCPCommonTypes.h"
#include "TCPPB.h"
#include "AddressXlation.h"
#include "GetMyIPAddr.h"

short gIPPDriverRefNum;

OSErr _TCPInit()
{

 auto ParamBlockRec  pb;
 auto OSErr    osErr;
  
 pb.ioParam.ioCompletion  = 0; 
 pb.ioParam.ioNamePtr  = "\p.ipp"; 
 pb.ioParam.ioPermssn  = fsCurPerm;
 
 osErr = PBOpen( &pb, false );
 if ( noErr == osErr ) {
  gIPPDriverRefNum  = pb.ioParam.ioRefNum;
 }
  
 return osErr;
}

OSErr _TCPGetIP(pb, ip, netMask, ioCompletion, async)
   struct IPParamBlock  *pb;
   ip_addr     *ip;
   long     *netMask;
   ProcPtr     ioCompletion;
   Boolean     async;
{

 auto OSErr     osErr;
 
 pb->ioCompletion    = ioCompletion;
 pb->ioCRefNum     = gIPPDriverRefNum;
 pb->csCode      = ipctlGetAddr;
  
 osErr = PBControl((ParmBlkPtr) pb, async);
 if (!async && (noErr == osErr)) {
  *ip       = pb->ourAddress;
  *netMask     = pb->ourNetMask;
 }
  
 return osErr;
}

main()
{ struct IPParamBlock myPB;
 ip_addr myIP;
 long myNetMask;

 if ( _TCPInit() == noErr ) {
  if ( _TCPGetIP( &myPB, &myIP, &myNetMask, 0, false ) == noErr ) {
   printf( "addr = %lo\n", myIP );
  }
  else
   printf( "YikesI\n" );
 }
 else
  printf( "WhoopsI\n" );
}

mahan@zaphod.ncsa.uiuc.edu (07/21/89)

You might want to grab the source for NCSA Telnet 2.3, which has a working
MacTCP driver support in it.

Available from ftp.ncsa.uiuc.edu ( 128.174.20.50 )