Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @file main.c
- * @brief Description
- * @date 2018-1-1
- * @author name of author
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <errno.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <assert.h>
- #include <limits.h>
- #include "debug.h"
- #include "memory.h"
- #include "args.h"
- int main(int argc, char *argv[]){
- /* Receber porto a registar */
- struct gengetopt_args_info args;
- cmdline_parser(argc, argv, &args);
- if (args.port_arg < 1 || args.port_arg > USHRT_MAX)
- {
- ERROR(1,"Invalid port number");
- }
- /* Criar e registar socket UDP IPv4 */
- int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
- if(sockfd == -1){
- ERROR(2,"Fail open socket");
- }
- struct sockaddr_in udp_server_endpoint;
- memset(&udp_server_endpoint, 0, sizeof(struct sockaddr_in));
- udp_server.sin_family = AF_INET;
- udp_server.sin_addr.s_addr = htonl(INADDR_ANY); // Todas as interfaces de rede
- udp_server.sin_port = htons(args.port_arg); // Server port
- if (bind(udp_server_socket, (struct sockaddr *)&udp_server_endpoint, sizeof(struct sockaddr_in)) == -1)
- ERROR(32, "Can't bind @udp_server_endpoint info");
- /* Registo local - bind */
- /* Liberta memória */
- cmdline_parser_free(&args);
- return 0;
- }
- /*
- * Perguntas:
- * a) O que sucede quando é indicado um porto entre 1 e 1023 (inclusive)?
- * b) O que sucede quando se tenta registar um porto que já está registado?
- * Nota: é possível obter uma lista dos portos UDP registados no sistema através do utilitário netstat, executado da seguinte forma: netstat -u -l
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement