Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * ddrFTP
- *
- * Author: Jan Łukaszewicz
- * 94398
- */
- #include <cstdio>
- #include <string>
- #include <strings.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- #include <pthread.h>
- #include "FtpSession.h"
- using namespace std;
- const int MAX_QUEUE_SIZE = 10;
- void* mainLoop(void*);
- void* ftpSession(void*);
- int main(int argc, char *argv[])
- {
- int *port = new int;
- if (argc >= 2 && strcmp(argv[1], "-p") == 0)
- {
- *port = atoi(argv[2]);
- }
- else
- {
- *port = 8888;
- }
- string welcomeMessage = "Welcome to ddrFTP\n";
- printf("%s", welcomeMessage.c_str());
- printf("I am listening on %d\n", *port);
- pthread_t mainThread;
- pthread_create(&mainThread, NULL, mainLoop, port);
- char killChar;
- scanf("%c", &killChar);
- printf("Server terminated\n");
- return 0;
- }
- void* mainLoop(void *args)
- {
- //struct servent *service_ptr;
- struct sockaddr_in server_addr, client_addr;
- int *port = (int*)args;
- int server_sck;
- unsigned int addr_len;
- bzero(&server_addr, sizeof server_addr);
- server_addr.sin_addr.s_addr = INADDR_ANY;
- server_addr.sin_family = AF_INET;
- server_addr.sin_port = htons(*port);
- if ((server_sck = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP))<0)
- perror("Cannot open socket");
- if (bind(server_sck,(struct sockaddr*)&server_addr, sizeof server_addr)<0)
- printf("Cannot bind socket %d to service\n",server_sck);
- if (listen(server_sck, MAX_QUEUE_SIZE)<0)
- perror("Cannot listen");
- else
- {
- int *client_sck = new int;
- addr_len=sizeof(struct sockaddr_in);
- while((*client_sck=accept(server_sck, (struct sockaddr*)&client_addr, &addr_len))>=0)
- {
- unsigned int *arg = new unsigned int;
- *arg = *client_sck;
- pthread_create(new pthread_t(), NULL, ftpSession, arg);
- client_sck = new int;
- }
- delete client_sck;
- }
- close(server_sck);
- return NULL;
- }
- void* ftpSession(void *args)
- {
- int *sck = (int*)args;
- /* to coś tam robisz */
- pthread_exit(NULL);
- return NULL;
- }
Add Comment
Please, Sign In to add comment