Hello friends,
Has anyone used the series 60 3rd edition emulator
to do UDP send and receive? My emulator can connect
to the internet (using browser) using the winsock type
connection (I could not get npacket to work). But, in
my code when the send is successful but the response
is never received. Code snippet is attached. The same
code works fine on S80.
Any help will be much appreciated
-a
RSocketServ iSocketServ;
User::LeaveIfError(iSocketServ.Connect());
TRequestStatus aStatus, bStatus;
RSocket sock;
TSockAddr anAddr;
TInt ret = sock.Open(iSocketServ, KAfInet, KSockDatagram, KProtocolInetUdp);
if(ret!=KErrNone) {
_LIT(KError,"Socket Create failed!\n");
}
TInetAddr dst(TInetAddr(INET_ADDR(192,168,1,102), 9999));
sock.SendTo(_L8("hello"), dst, 0, aStatus);
User::WaitForRequest(aStatus);
if (aStatus.Int() != KErrNone ) {
_LIT(KError,"Sending Failed!\n");
}
sock.RecvFrom(buf, anAddr, 0, bStatus);
User::WaitForRequest(bStatus); // the code hangs here
if (bStatus.Int() != KErrNone ) {
_LIT(KSend,"Receive Failed!\n");
}
sock.Close();
I also tried the BSD style code
int sock;
SOCKADDR_IN sockAddr;
SOCKADDR_IN sockAddrLocal;
char recvTxt[128];
char ip[32];
int con, len, ret;
unsigned int fromlen;
char *dummy;
sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if(sock == INVALID_SOCKET) {
guiw_DebugN ("Socket call failed");
return -1;
}
memset(&sockAddr,0, sizeof(sockAddr));
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(9999);
sockAddr.sin_addr.s_addr = inet_addr(server);
len = sendto(sock, "hello", strlen("hello"), 0, (SOCKADDR *)&sockAddr,
sizeof(SOCKADDR_IN));
int cnt = 0;
// ioctl (sock, FNONBIO, (void *)&nonblock, st);
fcntl (sock, F_SETFL, FNONBIO);
memset(recvTxt,0, sizeof(recvTxt));
do {
++cnt;
memset(&sockAddr,0, sizeof(sockAddr));
fromlen = sizeof(SOCKADDR_IN);
ret = recvfrom(sock, (char *)recvTxt, sizeof (recvTxt), 0, (SOCKADDR *)&sockAddr,
&fromlen);
User_After (1000000);
} while (cnt < 600 && (strlen (recvTxt) == 0));



