#include #include #include #include #include #include #include #include #include #include #include #include int cnet_init(int port) { int yes=1; int rc; int sfd; sfd = socket(AF_INET, SOCK_STREAM, 0); if (sfd < 0) { perror("socket"); return(-1); } if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) < 0) { perror("setsockopt"); return(-1); } cnet_saddr.sin_family = AF_INET; cnet_saddr.sin_addr.s_addr = INADDR_ANY; cnet_saddr.sin_port = htons(port); rc = bind(sfd, (struct sockaddr *) &cnet_saddr, sizeof(cnet_saddr)); if (rc < 0) { perror("bind"); return(-1); } rc = listen(sfd, 64); if (rc < 0) { perror("listen"); return(-1); } return(sfd); } int cnet_accept(int sfd) { int clen; clen = sizeof(cnet_caddr); return(accept(sfd, (struct sockaddr *)&cnet_caddr, &clen)); } int cnet_close(int sfd) { close(sfd); } int cnet_connect(char *hostname, int port, int *sd) { int sfd; struct sockaddr_in serv_addr; struct hostent *server; sfd = socket(AF_INET, SOCK_STREAM, 0); if (sfd < 0) { perror("socket"); return(-1); } server = gethostbyname(hostname); if (server == NULL) { perror("gethostbyname"); return(-1); } bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(port); if (connect(sfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) { perror("connect"); return(-1); } *sd = sfd; return(0); }