All pastes #419166 Raw Edit

Ricket

public cpp v1 · immutable
·published 2007-04-01 03:16 UTC
rendered paste body
// SERVER#define WIN32_LEAN_AND_MEAN#include <windows.h>#include <winsock2.h>#include <ws2tcpip.h>#include <stdio.h>#include <stdlib.h>#define PORT 5276int main() {	fd_set master;	fd_set read_fds;	struct sockaddr_in myaddr;	struct sockaddr_in remoteaddr;	SOCKET fdmax;	SOCKET listener;	SOCKET newfd;	char buf[256];	int nbytes;	bool yes = TRUE;	socklen_t addrlen;	SOCKET i;	unsigned int j;	FD_ZERO(&master);	FD_ZERO(&read_fds);	if((listener = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {		perror("socket");		exit(1);	}	if(setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, (char*)&yes, sizeof(bool)) == SOCKET_ERROR) {		perror("setsockopt");		exit(1);	}	memset(&myaddr, '\0', sizeof(myaddr));	myaddr.sin_family = AF_INET;	myaddr.sin_addr.s_addr = INADDR_ANY;	myaddr.sin_port = htons(PORT);	if(bind(listener, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1) {		perror("bind");		exit(1);	}	if(listen(listener, 15) == -1) {		perror("listen");		exit(1);	}	FD_SET(listener, &master);	fdmax = listener;	for(;;) {		read_fds = master;		if(select((int)fdmax +1, &read_fds, NULL, NULL, NULL) == -1) {			perror("select");			exit(1);		}		for(i=0;i<=fdmax;i++) {			if(FD_ISSET(i, &read_fds)) {				addrlen = sizeof(remoteaddr);				if((newfd = accept(listener, (struct sockaddr *)&remoteaddr, &addrlen)) == -1) {					perror("accept");				} else {					FD_SET(newfd, &master);					if(newfd>fdmax) {						fdmax = newfd;					}					printf("selectserver: new connection from %s on socket %d\n", inet_ntoa(remoteaddr.sin_addr), newfd);				}			} else {				if((nbytes = recv(i, buf, sizeof(buf), 0)) <= 0) {					if(nbytes==0) {						printf("selectserver: socket %d hung up\n", i);					} else {						perror("recv");					}					closesocket(i);					FD_CLR(i, &master);				} else {					for(j=0;j<=fdmax;j++) {						if(FD_ISSET(j, &master)) {							if(j!=listener && j!=i) {								if(send(j, buf, nbytes, 0) == -1) {									perror("send");								}							}						}					}				}			}		}	}	return 0;}