Example #1
0
File: srv.c Project: pivovard/ZCU
int main(int argc, char **argv)
{
  int sock, incoming_sock;
  int optval;
  struct sockaddr_in addr, incoming_addr;
  unsigned int incoming_addr_len;

  /* create socket */
  sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if (sock < 0) err("socket()");

  /* set reusable flag */
  optval = 1;
  setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));

  /* prepare inet address */
  memset(&addr, 0, sizeof(addr));
  addr.sin_family = AF_INET;
  addr.sin_port = htons(SRV_PORT);
  addr.sin_addr.s_addr = htonl(INADDR_ANY); /* listen on all interfaces */
  if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) < 0) err("bind");

  if (listen(sock, 10) < 0) err("listen");

  for(;;)
  {
    incoming_addr_len = sizeof(incoming_addr);
    incoming_sock = accept(sock, (struct sockaddr*)&incoming_addr, 
                      &incoming_addr_len);
    if (incoming_sock < 0)
    {
      close(sock);
      err("accept");
    }
    printf("connection from %s:%i\n",
              inet_ntoa(incoming_addr.sin_addr),
              ntohs(incoming_addr.sin_port)
        );
    if (fork() == 0) 
    {
      send_greetings(incoming_sock);
      close(incoming_sock);
      break;
    }
  }

  return 0;
}
Example #2
0
/* -------------------initiate ftp server-------------------
*/
int run_ftp(int port)
{

	memset(&listen_conn, 0, sizeof(connection));

	listen_conn.saddr.sin_port = htons(port);

	if (create_listen_socket(&listen_conn) < 0) {
		printlog("%s","create_listen_socket FAILED\n");
		exit(1);
	}

	for (;;) {
		if (accept_connection( &listen_conn, &sconn) < 0) {
			printlog("%s","accept_connection FAILED\n");
			continue;
		}

		signal(SIGCHLD, SIG_IGN);

		if (fork() == 0) {
        		close_conn(listen_conn);

        		status = CONNECTED;

        		send_greetings();

        		command_loop();

        		close_conn(sconn);
        		return 0;
		}

        	close_conn(sconn);
	}

	return 0;
}