/ ** Copyright (c) 2005, * All rights reserved ** File Name:. MyServer.c * Abstract: The design is based on the TCP Server select under vxworks * Author: Zhou Jianhong * Contact: alec_zhou@msn.com* Completion Date : March 10, 2005 * / # include
#define default_server_port 6699int Server; SEM_ID Server_SM; / ** Start the function server () as a task in appinit () LIKE this: * int RET = 0; * RET = TasksPawn ("TSERVER", 165, 0x0002, 1024, Funcptr) Server, * 0, 0, 0, 0, 0); * / void server () {INT RC = 0, SD = 0; int Addr_len = 0; int server_sock = 0; struct sockaddr_in server_addr, client_addr; memset (& server_addr, 0, sizeof (struct sockaddr_in)); memset (& client_addr, 0, sizeof (struct sockaddr_in)); server_sock = socket (AF_INET, SOCK_STREAM, 0); if (server_sock <0 ) {printf ( "Failed to create Socket./n"); return;} server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl (INADDR_ANY); server_addr.sin_port = htons (DEFAULT_SERVER_PORT); rc = bind (server_sock, (Struct SockAddr *) & Server_addr, SIZEOF (Struct SockAddr_in)); if (RC == -1) {Close (Server_Sock); Printf ("Failed to Bind Socket / N); Return;} RC = Lis Ten (Server_Sock, 2); if (rc == -1) {Printf ("socket listen error / n"); return; "TCP Server IS Ready for Receive Connection Request / N"); while (1) {addr_len = sizeof (struct sockaddr_in); sd = accept (server_sock, (struct sockaddr *) & client_addr, & addr_len); if (sd <= 0) {printf ( "socket accept error / n"); return;} else {printf ("Socket Connect Success / N"); Server = SD; Server_Proc (SD);}}} void server_proc (int suck) {int RC = 0; char buffer [32];
FD_set Socket; Struct TimeVal Wait; Wait.tv_Sec = 0; Wait.tv_usec = 500000; While (Server> 0) {FD_ZERO (& Socket); fd_set (sock, & socket); rc = select (fd_setsize, & socket, (fd_set *) 0, (fd_set *) 0, & Wait); if (rc == 0) Continue; if (fd_isset (sock, & socket)) {semtake (Server_SM, Wait_ForeVer); MEMSET (Buffer, 0, Sizeof (buffer); RC); RC = RECV (Sock, Buffer, Sizeof (Buffer), 0); if (rc> 0) {/ * You can add your application specific code here * / printf ("RECVMSG:% S / N", Buffer; semgive Server_sm);} else {printf ("socket closed / n"); close (sock); server = 0; semgive (server_sm); break;}} Taskdelay (10);}} / * End of the file * /