Re: call is blocked in recvfrom() and no further proceedings in Wi

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



You can't do it through ActiveSync. It doesn't forward those packets.
Using a real network adapter will work fine, but ActiveSync was not designed
to be a substitute for networking...

Paul T.

"Sudha.v" <Sudhav@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:4D4262DD-6E96-4B78-B0DB-BEF8303E8669@xxxxxxxxxxxxxxxx
>I have a sample UDP application which is working in emulator. I tried same
> way for this(i.e., for the program which I have shown here) also. But it's
> giving the same error. I have connected my device through Active Sync
> only.
> If Active Sync doesn't support UDP means, how to implement applications
> which uses UDP(for ex. VoIP, PTT/PoC(Push to Talk)?.
>
> --
> Attempting half-heartedly is like expecting failure and achieving it.
>
>
> "Paul G. Tobey [eMVP]" wrote:
>
>> How is the Windows CE device connected to the network where the desktop
>> machine is? Don't say ActiveSync; that won't work with UDP. I don't
>> have
>> any examples of datagram operations, except some for multicasting, sorry.
>>
>> Paul T.
>>
>> "Sudha.v" <Sudhav@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
>> news:EC61B1D6-D21D-4537-9F3F-B4BD42935A6D@xxxxxxxxxxxxxxxx
>> > Hi Paul,
>> > Thanks for ur reply. I have tested it on real device (Samsung). But no
>> > luck
>> > application is exiting when it reaches recvfrom().
>> >
>> > i=recvfrom(s1,packetbuffer,sizeof(packetbuffer),0,(SOCKADDR
>> > *)&addr,&cbRemoteAddrSize);
>> >
>> > This is the code I'm using. I changed many things from the previous
>> > code
>> > for
>> > testing purpose. Just have a look at the code and let me know u can
>> > find
>> > something on it.
>> > If there is any sample program for udp please let me know.
>> > Your help is greatly appreciated.
>> >
>> > Thanks,
>> >
>> >
>> >
>> > --
>> > Attempting half-heartedly is like expecting failure and achieving it.
>> >
>> >
>> > "Paul G. Tobey [eMVP]" wrote:
>> >
>> >> What happens on a *real device*. I don't trust the emulator for this
>> >> type
>> >> of thing. It's not a real device; its network stack is running on top
>> >> of
>> >> the real stack on the PC, etc.
>> >>
>> >> Paul T.
>> >>
>> >> "Sudha.v" <Sudhav@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
>> >> news:D84E9754-AA07-45B1-845A-3EEAADA4D5E7@xxxxxxxxxxxxxxxx
>> >> > In the below code, application simply keeps on waiting for incoming
>> >> > data(Means, call is blocked in recvfrom() and no further
>> >> > proceedings).
>> >> > Environment : EVC++ 4.0, Smart phone 2003 SDK Emulator.
>> >> > Simple intro about the application.
>> >> > An NT service is running in my system(PC) which is nothing but the
>> >> > server.
>> >> > My program has to send request to service through port 5070(in this
>> >> > port
>> >> > only
>> >> > server is receiving the requests). Depending upon request, server
>> >> > will
>> >> > send
>> >> > response back to the program in port 5090. and application uses UDP.
>> >> > · So In the code, socket "s" will send request to NT service.
>> >> > · And "sock" will receive the response.
>> >> > · Everything seems to be OK. But during debugging the application
>> >> > infinitely
>> >> > waiting in recvfrom() call. This call is not at all returning.
>> >> > But the same code is working in windows. Only in Windows CE it is
>> >> > not
>> >> > working.
>> >> > In order to find whether data is available in the port or not, I
>> >> > have
>> >> > done
>> >> > the following.
>> >> > · Sent data from Windows CE(i.e., socket is created in EVC++ 4.0 to
>> >> > send
>> >> > request to NT service).
>> >> > · Received the response in Windows(means, for reception I created
>> >> > socket
>> >> > in
>> >> > VC++ 6.0 and data is successfully received).
>> >> > · From the above two steps, I'm clear that, data is available in the
>> >> > specific port (i.e, in 5090).
>> >> > So, the issue is in Windows CE, recvfrom() call is infinitely
>> >> > waiting
>> >> > and
>> >> > not returning even though the packet is available in the specific
>> >> > net
>> >> > work
>> >> > address.
>> >> > You may be annoyed of seeing this bulk of code. But I'm desperately
>> >> > in
>> >> > need
>> >> > of the solution. So, please have a look at the code. Your help is
>> >> > greatly
>> >> > appreciated.
>> >> >
>> >> > #include <stdio.h>
>> >> > #include <stdlib.h>
>> >> > #include <malloc.h>
>> >> >
>> >> > #include <windows.h>
>> >> > #include <windowsx.h>
>> >> > #include <winsock2.h>
>> >> > #include <ws2tcpip.h>
>> >> > #include <string.h>
>> >> > #define DEFAULT_FAMILY AF_UNSPEC
>> >> > #define DEFAULT_SOCKTYPE SOCK_DGRAM
>> >> > #define DEFAULT_PORT "5090"
>> >> > #define BUFFER_SIZE 23 // length of "WinCE
>> >> > Echo
>> >> > Test Packet"
>> >> > #define TIMEOUT_SECS 2
>> >> > #define TIMEOUT_USECS 0
>> >> > SOCKET sock = INVALID_SOCKET;
>> >> > int nFamily = DEFAULT_FAMILY;
>> >> > int nSockType = DEFAULT_SOCKTYPE;
>> >> > char szRemoteName[64] = "INFBA01803";
>> >> > char *szPort = DEFAULT_PORT;
>> >> > SOCKADDR_STORAGE ssRemoteAddr;
>> >> > int cbXfer, cbTotalRecvd, cbRemoteAddrSize;
>> >> > WSADATA wsaData;
>> >> > ADDRINFO Hints, *AddrInfo = NULL, *AI;
>> >> > char szRemoteAddrString[128];
>> >> > fd_set fdReadSet;
>> >> > TIMEVAL timeout = {TIMEOUT_SECS, TIMEOUT_USECS};
>> >> > char pRecvBuf[BUFFER_SIZE];
>> >> > struct ip_mreq mreq;
>> >> > SOCKET sock, SockServ[FD_SETSIZE];
>> >> > fd_set fdSockSet;
>> >> > int nNumSocks, nNumSocksCount;
>> >> > char pBuf[] = "WinCE Echo Test Packet";
>> >> > int iReceiveStatus;
>> >> >
>> >> > //Change these if required
>> >> > #define USERNAME "sudhagar" //TODO
>> >> > #define PWD "nopass" //TODO
>> >> > #define INV_TO "sandeep" //TODO
>> >> > #define IP_SERVER "172.29.12.154"//TODO
>> >> > #define PORT_SERVER "5070" //TODO
>> >> > TIMEVAL ReceiveTimeout;
>> >> > int iRC = 0;
>> >> > int iSendStatus = 0;
>> >> > int SIPlib_main()
>> >> > {
>> >> > int i=0,j=0,k,infop1;
>> >> > char *reg_dest,*inv_dest,*bhr= NULL ,*nnop1;
>> >> > int x=0,reg_id=-1;
>> >> > char tmp[200],locip[50];
>> >> > unsigned int addr2=0;
>> >> > osip_proxy_authorization_t *proxy_auth;
>> >> > int cbXfer, cbTotalRecvd, cbRemoteAddrSize;
>> >> > TCHAR *str;
>> >> > SOCKET s,s1;
>> >> > struct sockaddr_in addr,addr1;
>> >> > char packetbuffer[1200]={{'\0'}},packetbuffer1[1000]={{'\0'}};
>> >> > WSADATA dat ;
>> >> >
>> >> > ///////////////
>> >> > SOCKET SIPRTPSOC;
>> >> > struct sockaddr_in addr21;
>> >> > char nextnon1[50];
>> >> > char *buf2;
>> >> > buf2=(char*)malloc(8*sizeof(char));
>> >> > ///////////////
>> >> > //End of variable declarations
>> >> >
>> >> > if(WSAStartup(MAKEWORD(2,2), &wsaData))
>> >> > {
>> >> > return 1;
>> >> > }
>> >> > sock = INVALID_SOCKET;
>> >> > for(i = 0; i < FD_SETSIZE; i++)
>> >> > SockServ[i] = INVALID_SOCKET;
>> >> >
>> >> > // Get a list of available addresses to serve on
>> >> >
>> >> > memset(&Hints, 0, sizeof(Hints));
>> >> > Hints.ai_family = nFamily;
>> >> > Hints.ai_socktype = nSockType;
>> >> > Hints.ai_flags = AI_NUMERICHOST | AI_PASSIVE;
>> >> > if(getaddrinfo(NULL, szPort, &Hints, &AddrInfo))
>> >> > {
>> >> > OutputDebugString(TEXT("ERROR: Couldn't get resolve the
>> >> > server
>> >> > name/address!"));
>> >> > }
>> >> > nNumSocksCount = 0;
>> >> > for(AI = AddrInfo; AI != NULL; AI = AI->ai_next)
>> >> > {
>> >> > if (nNumSocksCount == FD_SETSIZE)
>> >> > {
>> >> > // getaddrinfo returned more addresses than we could use
>> >> > break;
>> >> > }
>> >> >
>> >> > if((AI->ai_family == PF_INET) || (AI->ai_family == PF_INET6))
>> >> > //
>> >> > only want PF_INET or PF_INET6
>> >> > {
>> >> > SockServ[nNumSocksCount] = socket(AI->ai_family,
>> >> > AI->ai_socktype, AI->ai_protocol);
>> >> > if (SockServ[nNumSocksCount] != INVALID_SOCKET)
>> >> > {
>> >> > if (bind(SockServ[nNumSocksCount], AI->ai_addr,
>> >> > AI->ai_addrlen) == SOCKET_ERROR)
>> >> > closesocket(SockServ[nNumSocksCount]);
>> >> > else
>> >> > {
>> >> > OutputDebugString(
>> >> > TEXT("Socket 0x%08x ready for connection with
>> >> > %hs
>> >> > family, %hs type, on port %hs\r\n"),
>> >> > SockServ[nNumSocksCount],
>> >> > (AI->ai_family == AF_INET) ? "AF_INET" :
>> >> > ((AI->ai_family == AF_INET6) ? "AF_INET6" : "UNKNOWN"),
>> >> > (AI->ai_socktype == SOCK_STREAM) ? "TCP" :
>> >> > ((AI->ai_socktype == SOCK_DGRAM) ? "UDP" : "UNKNOWN"),
>> >> > szPort);
>> >> > nNumSocksCount++;
>> >> > }
>> >> > }
>> >> > }
>> >> > }
>> >> >
>> >> > freeaddrinfo(AddrInfo);
>> >> >
>> >> > if (nNumSocksCount == 0)
>> >> > {
>> >> > OutputDebugString(TEXT("ERROR: Unable to serve on any
>> >> > address.
>> >> > Error
>> >> > = %d\r\n"), WSAGetLastError());
>> >> > goto Cleanup;
>> >> > }
>> >> > //Initializing socket s for transmission
>> >> > s = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
>> >> > memset(&addr,0,sizeof(struct sockaddr_in));
>> >> > addr.sin_family = PF_INET;
>> >> > addr.sin_addr.s_addr = inet_addr(IP_SERVER);//Server IP
>> >> > addr.sin_port = htons((short )atoi(PORT_SERVER));//(5 0 7 0); Server
>> >> > Listen
>> >> > Port
>> >> > //1st Transmission ( REGISTER )
>> >> > i=sendto(s,reg_dest,strlen(reg_dest),0,(struct sockaddr
>> >> > *)&addr,sizeof(struct sockaddr_in));
>> >> > NKDbgPrintfW(L"\nSent : %d bytes\n\n",i);
>> >> > if(i != strlen(reg_dest))
>> >> > {
>> >> > OutputDebugString(TEXT("ERROR: Couldn't send the data! error
>> >> > =
>> >> > %d\r\n"), WSAGetLastError());
>> >> > }
>> >> > // Wait for incomming data/connections
>> >> > nNumSocks = nNumSocksCount;
>> >> > FD_ZERO(&fdSockSet);
>> >> > for (i = 0; i < nNumSocks; i++) // want to check all available
>> >> > sockets
>> >> > FD_SET(SockServ[i], &fdSockSet);
>> >> > if (select(nNumSocks, &fdSockSet, 0, 0, NULL) == SOCKET_ERROR)
>> >> > {
>> >> > OutputDebugString(TEXT("ERROR: select() failed with error =
>> >> > %d\r\n"), WSAGetLastError());
>> >> > goto Cleanup;
>> >> > }
>> >> > for (i = 0; i < nNumSocks; i++) // check which socket is ready to
>> >> > process
>> >> > {
>> >> > if (FD_ISSET(SockServ[i], &fdSockSet)) // proceed for
>> >> > connected
>> >> > socket
>> >> > {
>> >> > FD_CLR(SockServ[i], &fdSockSet);
>> >> > if(nSockType == SOCK_STREAM)
>> >> > {
>> >> > cbRemoteAddrSize = sizeof(ssRemoteAddr);
>> >> > sock = accept(SockServ[i], (SOCKADDR*)&ssRemoteAddr,
>> >> > &cbRemoteAddrSize);
>> >> > if(sock == INVALID_SOCKET)
>> >> > {
>> >> > OutputDebugString(TEXT("ERROR: accept() failed
>> >> > with
>> >> > error = %d\r\n"), WSAGetLastError());
>> >> > goto Cleanup;
>> >> > }
>> >> > OutputDebugString(TEXT("Accepted TCP connection from
>> >> > socket
>> >> > 0x%08x\r\n"), sock);
>> >> > }
>> >> > else
>> >> > {
>> >> > sock = SockServ[i];
>> >> > OutputDebugString(TEXT("UDP data available on socket
>> >> > 0x%08x\r\n"), sock);
>> >> > }
>> >> > break; // Only need one socket
>> >> > }
>> >> > }
>> >> > // Receive data from a client
>> >> >
>> >> > cbTotalRecvd = 0;
>> >> > do
>> >> > {
>> >> > cbRemoteAddrSize = sizeof(ssRemoteAddr);
>> >> > cbXfer = recvfrom(sock, packetbuffer + cbTotalRecvd,
>> >> > sizeof(packetbuffer) - cbTotalRecvd, 0,
>> >> > (SOCKADDR *)&ssRemoteAddr, &cbRemoteAddrSize);
>> >> > cbTotalRecvd += cbXfer;
>> >> > } while(cbXfer > 0 && cbTotalRecvd < sizeof(packetbuffer));
>> >> >
>> >> > OutputDebugString(TEXT("SUCCESS - Received %d bytes from client
>> >> > %hs\r\n"), cbTotalRecvd, szRemoteAddrString);
>> >> > Cleanup:
>> >> > for(i = 0; i < nNumSocks && SockServ[i] != INVALID_SOCKET; i++)
>> >> > closesocket(SockServ[i]);
>> >> > if(sock != INVALID_SOCKET)
>> >> > {
>> >> > shutdown(sock, SD_BOTH);


.



Relevant Pages

  • Re: ActiveSync 4.1 Still does not work...
    ... AS4.1 installs some USB ... ActiveSync, then allowing Windows to find it again. ... in the system tray for the new 'network adapter' with the 'acquiring network ... If everything seems to be set correctly, but no connection is established, ...
    (microsoft.public.pocketpc.activesync)
  • Re: I got it working!!
    ... The network admin would have to allow split-tunneling. ... Sentinel to play nice with ActiveSync 4.1?? ... check to make sure it is allowing multiple network connections. ... Check your firewall setting to make sure the ports listed above are ...
    (microsoft.public.pocketpc.activesync)
  • Re: Cant synch Verizon/UTSTarcom/Audiovox 6700 after 1rst attempt
    ... This Posting is provided "AS IS" with no warranties, and confers no ... rights. ... - going to Network connections/Local Area Connection (the mobile ... the activesync 4.1 on my pc at work looks very ...
    (microsoft.public.pocketpc.activesync)
  • Re: ActiveSync 4.1 USB Forever Connecting Problem Fixed - Cisco VPN Co
    ... The whole purpose of a firewall is to ... prevent things from happening like external devices connecting to network ... Previously I had ActiveSync 3.8 ...
    (microsoft.public.pocketpc.activesync)
  • Re: Cant synch Verizon/UTSTarcom/Audiovox 6700 after 1rst attempt
    ... This Posting is provided "AS IS" with no warranties, and confers no rights. ... - going to Network connections/Local Area Connection (the mobile ... the activesync 4.1 on my pc at work looks very ...
    (microsoft.public.pocketpc.activesync)