• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Can't see "localhost" machine when sending UDP broadcast on OS X
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Can't see "localhost" machine when sending UDP broadcast on OS X


  • Subject: Can't see "localhost" machine when sending UDP broadcast on OS X
  • From: Martin Bestmann <email@hidden>
  • Date: Mon, 4 Mar 2002 18:40:27 +0100

Hi,

I'm having a problem with OpenTransport UDP broadcasts on Mac OS X. Here is the scenario.

I'm having a client and an app. To detect the client I'm sending an UDP broadcast into the subnet where the client is located. Everything works fine as long as the client and the app are not running on the same machine. In the case of running both on the same machine the client never receives the broadcast (my NotifierProc is never called).
The same code works fine on Mac OS 9.

Here are the code snippets of what I do.

------------------------

Client code
-----------

UInt16 theSocket=0x1234; // something for the snippet
xEndPoint=OTOpenEndpointInContext(OTCreateConfiguration(kUDPName),0,NULL,&Ooops,gClientContext);
TBind reqBind;

InetAddress myAddress;
OTInitInetAddress(&myAddress,theSocket,0);

reqBind.addr.buf = (UInt8*)&myAddress;
reqBind.addr.len = sizeof(InetAddress);
reqBind.qlen = 1;

Ooops=xEndPoint->Bind(&reqBind,NULL);
REQUIRE(Ooops==kOTNoError,FailError);

Ooops=xEndPoint->InstallNotifier(xNotifyUUP,this);
REQUIRE(Ooops==kOTNoError,FailError);
Ooops=xEndPoint->SetBlocking();
REQUIRE(Ooops==kOTNoError,FailError);
Ooops=xEndPoint->SetAsynchronous(); // Ensure endpoint is async
REQUIRE(Ooops==kOTNoError,FailError);

The notifier never get's called.

AppCode
-------
xEndPoint=OTOpenEndpointInContext(OTCreateConfiguration(kUDPName),0,NULL,&Ooops,gClientContext);
Ooops=xEndPoint->Bind(NULL,NULL);
REQUIRE(Ooops==kOTNoError,FailError);
this->NegotiateDatagramOptions(xEndPoint);

Ooops=xEndPoint->InstallNotifier(xNotifyUUP,this);
REQUIRE(Ooops==kOTNoError,FailError);
Ooops=xEndPoint->SetBlocking();
REQUIRE(Ooops==kOTNoError,FailError);
Ooops=xEndPoint->SetAsynchronous(); // Ensure endpoint is async
REQUIRE(Ooops==kOTNoError,FailError);


void NegotiateDatagramOptions(EndpointRef inEndpoint)
{
struct TOption : public TOptionHeader
{
UInt32 value;
}; // struct TSizeOption

OSErr Ooops=noErr;
TOption optionBuffer;

optionBuffer.len = sizeof(optionBuffer);
optionBuffer.level = INET_IP;
optionBuffer.name = IP_BROADCAST;
optionBuffer.status = 0;
optionBuffer.value = T_YES;

TOptMgmt optReq;
optReq.flags = T_NEGOTIATE;
optReq.opt.maxlen = sizeof(optionBuffer);
optReq.opt.len = sizeof(optionBuffer);
optReq.opt.buf = (UInt8*) &optionBuffer;

Ooops=inEndpoint->OptionManagement(&optReq, &optReq);
_DBW(if (Ooops!=noErr) DebugMessage("COTTCPLookup::NegotiateDatagramOptions error=%d\n",Ooops);)
_DBW(else DebugMessage("COTTCPLookup::NegotiateDatagramOptions success!\n");)
_DBW(if (optionBuffer.status!=T_SUCCESS) DebugMessage("COTTCPLookup::NegotiateDatagramOptions optionBuffer.status=%d\n",optionBuffer.status);)
}

Sending the broadcast is done here

OTResult Ooops=noErr;
rUDPBroadcastServerData ServerData;

InetAddress BroadcastAddress;

TUnitData theUnitData;
OTInitInetAddress(&BroadcastAddress,xSocket,theNet);
theUnitData.addr.len=sizeof(BroadcastAddress);
theUnitData.addr.buf=(UInt8*)&BroadcastAddress;
theUnitData.opt.maxlen=0;
theUnitData.opt.len=0;
theUnitData.opt.buf=NULL;
theUnitData.udata.len=sizeof(ServerData);
theUnitData.udata.buf=(UInt8*)&ServerData;
Ooops=xEndPoint->SndUData(&theUnitData);

------------------------

Is this a known issue? Is there a workaround?

Best regards,

Martin
--
_________________________________________________________________________
Martin Bestmann Netopia Development GmbH
Phone: +49-9134-9942-0 Weingasse 26
Fax: +49-9134-997911 91077 Neunkirchen am Brand
e-mail:email@hidden Germany
_______________________________________________
macnetworkprog mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/macnetworkprog
Do not post admin requests to the list. They will be ignored.

  • Follow-Ups:
    • Re: Can't see "localhost" machine when sending UDP broadcast on OS X
      • From: Vincent Lubet <email@hidden>
  • Prev by Date: Re: Question about friendly exits
  • Next by Date: Does Launch Services honor IC preferred Browser? No, not really.
  • Previous by thread: Re: Question about friendly exits
  • Next by thread: Re: Can't see "localhost" machine when sending UDP broadcast on OS X
  • Index(es):
    • Date
    • Thread