static void udpread(void) { char buf[BUFSIZE]; int ret = recv(sockfd, buf, BUFSIZE, 0); if (ret < 0) { sockerror("recv (udp)"); x_closesocket(sockfd); exit(1); } else if (ret > 0) { #ifdef _WIN32 int j; for (j = 0; j < ret; j++) putchar(buf[j]); #else if (write(1, buf, ret) < ret) { perror("write"); exit(1); } #endif } }
static void rmport(t_fdpoll *x) { int nfd = nfdpoll; int i, size = nfdpoll * sizeof(t_fdpoll); t_fdpoll *fp; for (i = nfdpoll, fp = fdpoll; i--; fp++) { if (fp == x) { x_closesocket(fp->fdp_fd); free(fp->fdp_outbuf); while (i--) { fp[0] = fp[1]; fp++; } fdpoll = (t_fdpoll *)realloc(fdpoll, (nfdpoll-1) * sizeof(t_fdpoll)); nfdpoll--; printf("number_connected %d;\n", nfdpoll); return; } } fprintf(stderr, "warning: item removed from poll list but not found"); }
int udp_send_init(void) { int portno, protocol; struct sockaddr_in server; struct hostent *hp; int nretry = 10; const char *hostname = "127.0.0.1"; // hostname = "192.168.1.121"; portno = UDP_SEND_PORT; protocol = SOCK_DGRAM; sockfd = socket(AF_INET, protocol, 0); if (sockfd < 0) { sockerror("socket()"); return -1; } /* connect socket using hostname provided in command line */ server.sin_family = AF_INET; hp = gethostbyname(hostname); if (hp == 0) { fprintf(stderr, "%s: unknown host\n", hostname); x_closesocket(sockfd); return -1; } memcpy((char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length); /* assign client port number */ server.sin_port = htons((unsigned short)portno); /* try to connect. */ if (connect(sockfd, (struct sockaddr *) &server, sizeof (server)) < 0) { sockerror("connect"); x_closesocket(sockfd); return -1; } }
static void udpread(void) { char buf[BUFSIZE]; int ret = recv(sockfd, buf, BUFSIZE, 0); if (ret < 0) { sockerror("recv (udp)"); x_closesocket(sockfd); exit(1); } else if (ret > 0) makeoutput(buf, ret); }
int main(int argc, char **argv) { int portno; struct sockaddr_in server; int nretry = 10; #ifdef _WIN32 short version = MAKEWORD(2, 0); WSADATA nobby; #endif if (argc < 2 || sscanf(argv[1], "%d", &portno) < 1 || portno <= 0) goto usage; if (argc >= 3) { if (!strcmp(argv[2], "tcp")) protocol = SOCK_STREAM; else if (!strcmp(argv[2], "udp")) protocol = SOCK_DGRAM; else goto usage; } else protocol = SOCK_STREAM; #ifdef _WIN32 if (WSAStartup(version, &nobby)) sockerror("WSAstartup"); #endif sockfd = socket(AF_INET, protocol, 0); if (sockfd < 0) { sockerror("socket()"); exit(1); } maxfd = sockfd + 1; server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; #ifdef IRIX /* this seems to work only in IRIX but is unnecessary in Linux. Not sure what MSW needs in place of this. */ if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, 0, 0) < 0) fprintf(stderr, "setsockopt failed\n"); #endif /* assign client port number */ server.sin_port = htons((unsigned short)portno); /* name the socket */ if (bind(sockfd, (struct sockaddr *)&server, sizeof(server)) < 0) { sockerror("bind"); x_closesocket(sockfd); return (0); } if (protocol == SOCK_STREAM) { if (listen(sockfd, 5) < 0) { sockerror("listen"); x_closesocket(sockfd); exit(1); } } /* now loop forever selecting on sockets */ while (1) dopoll(); usage: fprintf(stderr, "usage: pdreceive <portnumber> [udp|tcp]\n"); fprintf(stderr, "(default is tcp)\n"); exit(1); }