codice:
short int make_connection (int *sock, const char *hostname, unsigned short int port) {
struct sockaddr_in sock_name;
struct hostent *ip;
if (!(ip = gethostbyname(hostname))) {
return (1);
}
if ((*sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
return (2);
}
memset(&sock_name, 0, sizeof(sock_name));
sock_name.sin_family = AF_INET;
sock_name.sin_port = htons(80);
memcpy(&sock_name.sin_addr, ip->h_addr, ip->h_length);
if (connect(*sock, (struct sockaddr *)&sock_name, sizeof(sock_name)) < 0) {
return (3);
}
return (0);
}
short int close_connection (int *sock) {
if (shutdown(*sock, 2) < 0) {
close(*sock);
return (1);
}
return (0);
}
short int send_request (int *sock, const char *request) {
if (send(*sock, request, strlen(request) + 1, 0) < 0) {
return (1);
}
return (0);
}
short int receve_message (int *sock, unsigned long int sockStart, FILE *fp) {
FILE *fheaders;
char receve[1024+1];
char *headersfile;
int elem;
headersfile = getheadersFname();
fheaders = fopen(headersfile, "wb");
/* Save Headers */
while ((elem = recv(*sock, receve, 1024, 0))) {
//fprintf (stderr, "%u\r\n", elem);
receve[elem] = '\0';
fwrite (receve, sizeof(char), elem, fheaders);
fflush (fheaders);
if (getEofHeaders(headersfile, fp) > 0) {
fclose(fheaders);
break;
}
}
/* Save The Rest of The Message */
while ((elem = recv(*sock, receve, 1024, 0))) {
receve[elem-5] = '\0';
fwrite (receve, sizeof(char), elem-5, fp);
fflush (fp);
}
fclose(fp);
return (0);
}