#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>

#define BUF_SIZE 1024
#define PORT 1234
void * recv_file(void * arg);

int main()
{
    pthread_t rcv_thread;
    void * thread_return;

    pthread_create(&rcv_thread, NULL, recv_file, NULL);
    pthread_join(rcv_thread, &thread_return);

    return 0;
}

void * recv_file(void * arg)
{
    int serv_sock;
    char buf[BUF_SIZE];
    char *fstr = "konfiguracja1_odebrana.txt";
    FILE *fp;
    int read_cnt;

    struct sockaddr_in serv_adr, clnt_adr;
    socklen_t clnt_adr_sz;

    serv_sock=socket(PF_INET, SOCK_STREAM, 0);

    memset(&serv_adr, 0, sizeof(serv_adr));
    serv_adr.sin_family=AF_INET;
    serv_adr.sin_addr.s_addr=htonl(INADDR_ANY);
    serv_adr.sin_port=htons(PORT);

    bind(serv_sock, (struct sockaddr*)&serv_adr, sizeof(serv_adr));
    listen(serv_sock, 5);

    while(1)
    {
        clnt_adr_sz=sizeof(clnt_adr);
        int clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_adr, &clnt_adr_sz);

        fp=fopen(fstr, "wb");
        while((read_cnt=read(clnt_sock, buf, BUF_SIZE))!=0)
            fwrite((void*)buf, 1, read_cnt, fp);

        write(clnt_sock, "Thank you", 10);
        fclose(fp);
        close(clnt_sock);
    }

    close(serv_sock);
    return NULL;
}
