#include "basic.h"
int MAX(int,int);
int MAX(int uno, int due){
if(uno > due)
return uno;
return due;
}
void client_somma(FILE *fp, int sockfd) {
int maxfdl;
fd_set rset;
char sendline[MAXLINE], sendline2[MAXLINE], recvline[MAXLINE];
int n;
char * str = (char*) malloc(MAXLINE);
FD_ZERO(&rset);
for( ; ; ) {
FD_SET(fileno(fp), &rset);
FD_SET(sockfd, &rset);
maxfdl = MAX(fileno(fp), sockfd) + 1;
if( select(maxfdl, &rset, NULL, NULL, NULL) < 0 )
err_sys("select error");
if( FD_ISSET(sockfd, &rset) ) {
if ( (n = reti_readline(sockfd, recvline, MAXLINE)) < 0) {
if( errno == EPIPE ) {
printf("str_cli: server terminated prematurely\n");
break;
}
else {
printf("errore %d\n", errno);
err_sys("readline error");
}
}
if (n == 0)
err_quit("str_cli: server terminated prematurely");
fputs(recvline, stdout);
}
if( FD_ISSET(fileno(fp), &rset) ) {
bzero(str, strlen(str));
/* if( fgets(sendline, MAXLINE, fp) == NULL)
return;
if( fgets(sendline2, MAXLINE, fp) == NULL)
return;*/
scanf("%s",&sendline);
scanf("%s",&sendline2);
strncat(str,sendline, strlen(sendline));
strncat(str," ", 1);
strncat(str,sendline2, strlen(sendline2));
strncat(str, "\n", 1);
if( (reti_writen(sockfd, str, strlen(str))) < 0)
err_sys("write error");
}
}
}
int main(int argc, char **argv) {
int sockfd, n;
struct sockaddr_in servaddr;
if (argc != 2)
err_quit("usage: client <IPaddress>");
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
err_sys("socket error");
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT); /* echo server con select */
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
err_quit("inet_pton error for %s", argv[1]);
if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
err_sys("connect error");
client_somma(stdin, sockfd); /* svolge tutto il lavoro del client */
exit(0);
}