/*++ Copyright (c) 1991 Microsoft Corporation Module Name: cdpsrv.c Abstract: Author: Mike Massa (mikemas) Feb 24, 1992 Revision History: Who When What -------- -------- ---------------------------------------------- mikemas 02-24-92 created Notes: --*/ #include #include #include #include #include #define MAX_PACKET_SIZE 65535-20-68 static char szTestPattern [] = "data" ; #define TESTPATTERN_LEN 4 int count = 0; WSADATA WsaData; // void _CRTAPI1 int _cdecl main(int argc, char **argv, char **envp) { SOCKET serve_me; u_short Port; struct sockaddr addr, recvaddr; int addrlen, recv_addrlen; SOCKADDR_CLUSTER *clus_addr = (PSOCKADDR_CLUSTER)&addr; char *buf; int err; int i, j; WORD versionRequested = MAKEWORD(2, 0); DWORD bytesReturned = 0; if(argc<2){ printf("usage: cdpsrv port\n"); exit(4); } Port = (u_short) atoi(argv[1]); err = WSAStartup( versionRequested, &WsaData ); if ( err != ERROR_SUCCESS ) { printf("cdpsrv: WSAStartup %d:", err); exit(1); } if ((buf = malloc(MAX_PACKET_SIZE)) == NULL) { printf("out of memory\n"); exit(1); } memset(&addr,0,sizeof(addr)); clus_addr->sac_family = AF_CLUSTER; clus_addr->sac_port = Port; clus_addr->sac_node = 0; serve_me=socket(AF_CLUSTER, SOCK_DGRAM, CLUSPROTO_CDP); if (serve_me == INVALID_SOCKET){ printf("\nsocket failed (%d)\n", WSAGetLastError()); exit(1); } err = WSAIoctl( serve_me, SIO_CLUS_IGNORE_NODE_STATE, NULL, 0, NULL, 0, &bytesReturned, NULL, NULL ); if (err == SOCKET_ERROR) { printf("Died on WSHIoctl(), status %u\n", WSAGetLastError()); closesocket(serve_me); exit(9); } if (bind(serve_me, &addr, sizeof(addr))==SOCKET_ERROR){ printf("\nbind failed (%d) on port %d\n", WSAGetLastError(), Port); closesocket(serve_me); exit(1); } while(1) { recv_addrlen = sizeof(SOCKADDR_CLUSTER); err = recvfrom( serve_me, buf, MAX_PACKET_SIZE, 0, &recvaddr, &recv_addrlen ); if (err == SOCKET_ERROR) { printf("\nrecvfrom failed (%d)\n", WSAGetLastError()); break; } i = 0 ; while (i < err) { for (j=0; j < TESTPATTERN_LEN && i < err; i++, j++) if (buf [i] != szTestPattern [j]) { printf ("Received Length is %d\n", err) ; while (i < err) { printf ("Char at %d is %d %c\n", i, buf[i], buf[i]) ; i++ ; } exit (1) ; } } if ((++count % 50) == 0) { printf("#"); } } closesocket(serve_me); }