void mytestfunction(void *buffer, UInt32 length)
{
	// Local variables
	Err err;
	UInt16 refNum, ifErrs, ifInstance;
	UInt32 ifCreator, timeout = SysTicksPerSecond() * 10;	// 10 second timeout
	NetSocketRef socket;
	NetSocketAddrRawType socketaddrP;

	// Locate NetLib
	err = SysLibFind("Net.lib", &refNum);
	if(err)
	{
		FrmAlert(AlertFindNetLib);
		return;
	}

	// Open library
	err = NetLibOpen(refNum, &ifErrs);
	if((err || ifErrs) && (err != netErrAlreadyOpen))
	{
		FrmAlert(AlertOpenNetLib);
		return;
	}

	// Create socket
	socket = NetLibSocketOpen(refNum, netSocketAddrRaw, netSocketTypeRaw, 0, timeout, &err);
	if(socket == -1)
	{
		FrmAlert(AlertCreateSocket);
		return;
	}

	// **********************************************************
	// if(NetLibIFGet(refNum, INDEX, &ifCreator, &ifInstance) != 0)
	// How do i know which index number to use,?
	// **********************************************************
	if(NetLibIFGet(refNum, 0, &ifCreator, &ifInstance) != 0)
	{
		FrmAlert(AlertIfGet);
		return;
	}
	socketaddrP.family = netSocketAddrRaw;
	socketaddrP.ifInstance = ifInstance;
	socketaddrP.ifCreator = ifCreator;

	// Bind socket
	NetLibSocketBind(refNum, socket, (NetSocketAddrType *)&socketaddrP, sizeof(NetSocketAddrINType), timeout, &err);
	switch(err)
	{
		case netErrTimeout:
			WinDrawChars("Timeout", 10, 0, 0);
			break;
		case netErrNotOpen:
			WinDrawChars("NotOpen", 10, 0, 0);
			break;
		case netErrParamErr:
			WinDrawChars("ParamErr", 10, 0, 0);
			break;
		case netErrSocketNotOpen:
			WinDrawChars("SocketNotOpen", 10, 0, 0);
			break;
		case netErrSocketAlreadyConnected:
			WinDrawChars("AlreadyConnected", 10, 0, 0);
			break;
		case netErrSocketClosedByRemote:
			WinDrawChars("ClosedByRemote", 10, 0, 0);
			break;
		case netErrOutOfCmdBlocks:
			WinDrawChars("OutOfCmdBlock", 10, 0, 0);
			break;
		case 0:
			WinDrawChars("AllesKlar", 10, 0, 0);
			break;
	}
	if(err != 0)
	{
		FrmAlert(AlertBindSocket);
		return;
	}

	// Read
	length = NetLibReceive(refNum, socket, buffer, length, 0, NULL, 0, timeout * 2, &err);
	switch(err)
	{
		case netErrTimeout:
			WinDrawChars("Timeout", 10, 0, 50);
			break;
		case netErrNotOpen:
			WinDrawChars("NotOpen", 10, 0, 50);
			break;
		case netErrParamErr:
			WinDrawChars("ParamErr", 10, 0, 50);
			break;
		case netErrSocketNotOpen:
			WinDrawChars("SocketNotOpen", 10, 0, 50);
			break;
		case netErrWouldBlock:
			WinDrawChars("WouldBlock", 10, 0, 50);
			break;
		case netErrUserCancel:
			WinDrawChars("UserCancel", 10, 0, 50);
			break;
		case 0:
			WinDrawChars("AllesKlar", 10, 0, 50);
			break;
	}
	if(err != 0)
	{
		FrmAlert(AlertReceive);
		return;
	}
	WinDrawChars(buffer, 50, 0, 20);

	// Close socket
	if(NetLibSocketClose(refNum, socket, timeout, &err) != 0)
	{
		FrmAlert(AlertCloseSocket);
		return;
	}

	// Close library
	err = NetLibClose(refNum, false);
}