Once a device has been discovered, an IrDA connect may be initiated.
In terms of the IrDA specification, a successful return from connect will put the two machines into the link state (or NRM) after having completed both the IrLAP and IrLMP connect procedures.
Use a listening socket (sock1
in the code fragment) to set up the IrDA protocol stack in a “wait for connect” state. The RSocket::Listen()
call completes immediately and a NULL
acceptor socket (sock2
in the code fragment) is set up to accept the incoming connection on the listening socket. In this example, a maximum of 5 of these connections will be accepted on one particular socket home port ID before RSocket::Accept()
fails.
Once the accept call returns successfully, a RSocket::Read()
may be queued on the acceptor socket (sock2
). If the client code requires a discovery indication to be signalled in some way, a discovery Ioctl request can be queued at any stage prior to the RSocket::Accept()
call. The format of the discovery Ioctl request is outlined in a later section.
RSocketServ ss; ... // // BIND TO HOME PORT 0x02 // TRequestStatus stat; addr.SetPort(0x02); sock1.Bind(addr,stat); // Bind to socket User::WaitForRequest(stat); // stat should return KErrNone
// // LISTEN - RETURNS IMMEDIATELY AFTER SETTING UP SOCKET. // sock1.Listen(5,stat); // Wait for Connect....Listening User::WaitForRequest(stat); // stat should return KErrNone
// // CREATE ACCEPT SOCKET // RSocket sock2; sock2.Open(ss); // Open NULL socket. sock1.Accept(sock2,stat); // Create ACCEPT socket - only User::WaitForRequest(stat); // return after connect accepted. // stat should return KErrNone
// // CONNECTION ACCEPTED! QUEUE READ ON ACCEPT SOCKET // sock2.Read(data,stat); User::WaitForRequest(stat); // stat should return KErrNone