mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -05:00 
			
		
		
		
	git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@403 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									c51b612e2a
								
							
						
					
					
						commit
						b3588daa20
					
				
							
								
								
									
										90
									
								
								plrr_subs_win.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								plrr_subs_win.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,90 @@
 | 
			
		||||
#include <winsock2.h>
 | 
			
		||||
#include <ws2tcpip.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#define HELLO_PORT 50004
 | 
			
		||||
#define HELLO_GROUP "239.255.0.0"
 | 
			
		||||
#define MSGBUFSIZE 1416
 | 
			
		||||
 | 
			
		||||
struct sockaddr_in addr;
 | 
			
		||||
int fd;
 | 
			
		||||
 | 
			
		||||
//void __stdcall SETUP_RSOCKET(void)
 | 
			
		||||
void setup_rsocket_(void)
 | 
			
		||||
{
 | 
			
		||||
  struct ip_mreq mreq;
 | 
			
		||||
  u_int yes=1;
 | 
			
		||||
 | 
			
		||||
  // Make sure that we have compatible Winsock support
 | 
			
		||||
  WORD wVersionRequested;
 | 
			
		||||
  WSADATA wsaData;
 | 
			
		||||
  int err;
 | 
			
		||||
 
 | 
			
		||||
  wVersionRequested = MAKEWORD( 2, 2 );
 | 
			
		||||
  err = WSAStartup( wVersionRequested, &wsaData );
 | 
			
		||||
  if ( err != 0 ) {
 | 
			
		||||
    /* Tell the user that we could not find a usable */
 | 
			
		||||
    /* WinSock DLL.                                  */
 | 
			
		||||
    exit(1);
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
  /* Confirm that the WinSock DLL supports 2.2.*/
 | 
			
		||||
  /* Note that if the DLL supports versions greater    */
 | 
			
		||||
  /* than 2.2 in addition to 2.2, it will still return */
 | 
			
		||||
  /* 2.2 in wVersion since that is the version we      */
 | 
			
		||||
  /* requested.                                        */
 | 
			
		||||
 
 | 
			
		||||
  if ( LOBYTE( wsaData.wVersion ) != 2 ||
 | 
			
		||||
       HIBYTE( wsaData.wVersion ) != 2 ) {
 | 
			
		||||
    /* Tell the user that we could not find a usable */
 | 
			
		||||
    /* WinSock DLL.                                  */
 | 
			
		||||
    WSACleanup( );
 | 
			
		||||
    exit(1); 
 | 
			
		||||
  }
 | 
			
		||||
  /* The WinSock DLL is acceptable. Proceed. */
 | 
			
		||||
 | 
			
		||||
  /* create what looks like an ordinary UDP socket */
 | 
			
		||||
  if ((fd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0) {
 | 
			
		||||
    perror("socket");
 | 
			
		||||
    exit(1);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* allow multiple sockets to use the same PORT number */
 | 
			
		||||
  if (setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0) {
 | 
			
		||||
    perror("Reusing ADDR failed");
 | 
			
		||||
    exit(1);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* set up destination address */
 | 
			
		||||
  memset(&addr,0,sizeof(addr));
 | 
			
		||||
  addr.sin_family=AF_INET;
 | 
			
		||||
  addr.sin_addr.s_addr=htonl(INADDR_ANY); /* N.B.: differs from sender */
 | 
			
		||||
  addr.sin_port=htons(HELLO_PORT);
 | 
			
		||||
     
 | 
			
		||||
  /* bind to receive address */
 | 
			
		||||
  if (bind(fd,(struct sockaddr *) &addr,sizeof(addr)) < 0) {
 | 
			
		||||
    perror("bind");
 | 
			
		||||
    exit(1);
 | 
			
		||||
  }
 | 
			
		||||
     
 | 
			
		||||
  /* use setsockopt() to request that the kernel join a multicast group */
 | 
			
		||||
  mreq.imr_multiaddr.s_addr=inet_addr(HELLO_GROUP);
 | 
			
		||||
  mreq.imr_interface.s_addr=htonl(INADDR_ANY);
 | 
			
		||||
  if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0) {
 | 
			
		||||
    perror("setsockopt");
 | 
			
		||||
    exit(1);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//void __stdcall RECV_PKT(char buf[])
 | 
			
		||||
void recv_pkt_(char buf[])
 | 
			
		||||
{
 | 
			
		||||
  int addrlen,nbytes;
 | 
			
		||||
  addrlen=sizeof(addr);
 | 
			
		||||
  if ((nbytes=recvfrom(fd,buf,1416,0, 
 | 
			
		||||
		       (struct sockaddr *) &addr,&addrlen)) < 0) {
 | 
			
		||||
    perror("recvfrom");
 | 
			
		||||
    exit(1);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user