From: Peep P. <so...@us...> - 2004-08-03 14:50:22
|
Update of /cvsroot/agd/client In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1475 Added Files: net.c Log Message: Network functions. --- NEW FILE: net.c --- #include <stdlib.h> #include <allegro.h> #include "sys.h" #include "net.h" #include "gui.h" extern int cursor_y; extern gui_font_t *fonts; int fd; fd_set readfd; void net_connect() { struct sockaddr_in sin; int ret; #ifdef WIN32 WSADATA wsaData; if(WSAStartup(MAKEWORD(1, 1), &wsaData)) { fprintf(stderr, "Can't initialize Winsock!\n"); exit(1); } #endif sin.sin_family = AF_INET; sin.sin_port = htons(conf.port); printf("port: %d\n", conf.port); if(conf.host[0] > '0' && conf.host[0] < '9') { /* This is an IP address. */ if(!inet_aton(conf.host, &sin.sin_addr)) { printf("Invalid IP address '%s'.\n", conf.host); return; } } else { /* This is a hostname. */ struct hostent *he; he = gethostbyname(conf.host); if(!he) { printf("Cannot look up %s.\n", conf.host); return; } sin.sin_addr = *(struct in_addr *)he->h_addr; } fd = socket(PF_INET, SOCK_STREAM, 0); if(fd < 0) { perror("Can't open socket"); exit(1); } ret = connect(fd, (struct sockaddr *) &sin, sizeof sin); if(ret < 0) { perror("Can't connect"); exit(1); } } void net_events() { struct timeval timeout = { 0, 0 }; char buf[4096]; int ret; FD_ZERO(&readfd); FD_SET(fd, &readfd); ret = select(fd + 1, &readfd, 0, 0, &timeout); if(ret <= 0) { if(ret < 0 ) perror("select"); return; } if(FD_ISSET(fd, &readfd)) { ret = recv(fd, buf, 4096, 0); switch(ret) { case -1: printf("Error reading from server\n"); /* fallthrough */ case 0: printf("Disconnected from server.\n"); break; default: /* p = buf; while(strlen(p)) {*/ gui_label(screen, 0, buf, 0, cursor_y, SCREEN_W, SCREEN_H); cursor_y += fonts[0].b->h; break; } } } |