int main(int argc, char *argv[]){ int sock; pid_t pid; char message[BUF_SIZE]; struct sockaddr_in serv_addr; if(argc != 3){ printf("Usage : %s <ip> <port>\n", argv[0]); exit(1); } sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == -1) error_handling("socket() error"); memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(argv[1]); serv_addr.sin_port = htons(atoi(argv[2])); if(connect(sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1) error_handling("connect() error"); else puts("Connected ........"); pid = fork(); if(pid == 0) write_routine(sock, message); else read_routine(sock, message); close(sock); return 0; }
int main(int argc, char *argv[]) { int sockfd; struct sockaddr_in serv_addr; pid_t pid; if (argc != 3) { fprintf(stderr, "Usage: %s <ip> <port>\n", argv[0]); exit(EXIT_FAILURE); } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket() failed"); exit(EXIT_FAILURE); } memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(argv[1]); serv_addr.sin_port = htons(atoi(argv[2])); if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) == -1) { fprintf(stderr, "connect() failed: %s\n", strerror(errno)); exit(EXIT_FAILURE); } pid = fork(); if (pid < 0) { perror("fork() failed"); exit(EXIT_FAILURE); } else if (pid == 0) { write_routine(sockfd); } else { read_routine(sockfd); } close(sockfd); return 0; }
static void download (char *target_name, char *args, int from_tty, void (*write_routine) (bfd *from_bfd, asection *from_sec, file_ptr from_addr, bfd_vma to_addr, int len), void (*start_routine) (bfd_vma entry)) { struct cleanup *old_chain; asection *section; bfd *pbfd; bfd_vma entry; int i; #define WRITESIZE 1024 char *filename; int quiet; int nostart; quiet = 0; nostart = 0; filename = NULL; while (*args != '\000') { char *arg; while (isspace (*args)) args++; arg = args; while ((*args != '\000') && !isspace (*args)) args++; if (*args != '\000') *args++ = '\000'; if (*arg != '-') filename = arg; else if (strncmp (arg, "-quiet", strlen (arg)) == 0) quiet = 1; else if (strncmp (arg, "-nostart", strlen (arg)) == 0) nostart = 1; else error ("unknown option `%s'", arg); } if (!filename) filename = get_exec_file (1); pbfd = bfd_openr (filename, gnutarget); if (pbfd == NULL) { perror_with_name (filename); return; } old_chain = make_cleanup_bfd_close (pbfd); if (!bfd_check_format (pbfd, bfd_object)) error ("\"%s\" is not an object file: %s", filename, bfd_errmsg (bfd_get_error ())); for (section = pbfd->sections; section; section = section->next) { if (bfd_get_section_flags (pbfd, section) & SEC_LOAD) { bfd_vma section_address; bfd_size_type section_size; file_ptr fptr; const char *section_name; section_name = bfd_get_section_name (pbfd, section); section_address = bfd_get_section_vma (pbfd, section); /* Adjust sections from a.out files, since they don't carry their addresses with. */ if (bfd_get_flavour (pbfd) == bfd_target_aout_flavour) { if (strcmp (section_name, ".text") == 0) section_address = bfd_get_start_address (pbfd); else if (strcmp (section_name, ".data") == 0) { /* Read the first 8 bytes of the data section. There should be the string 'DaTa' followed by a word containing the actual section address. */ struct data_marker { char signature[4]; /* 'DaTa' */ unsigned char sdata[4]; /* &sdata */ } marker; bfd_get_section_contents (pbfd, section, &marker, 0, sizeof (marker)); if (strncmp (marker.signature, "DaTa", 4) == 0) { if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) section_address = bfd_getb32 (marker.sdata); else section_address = bfd_getl32 (marker.sdata); } } } section_size = bfd_get_section_size_before_reloc (section); if (!quiet) printf_filtered ("[Loading section %s at 0x%x (%d bytes)]\n", bfd_get_section_name (pbfd, section), section_address, section_size); fptr = 0; while (section_size > 0) { int count; static char inds[] = "|/-\\"; static int k = 0; QUIT; count = min (section_size, WRITESIZE); write_routine (pbfd, section, fptr, section_address, count); if (!quiet) { printf_unfiltered ("\r%c", inds[k++ % 4]); gdb_flush (gdb_stdout); } section_address += count; fptr += count; section_size -= count; } } } if (!nostart) { entry = bfd_get_start_address (pbfd); if (!quiet) printf_unfiltered ("[Starting %s at 0x%x]\n", filename, entry); start_routine (entry); } do_cleanups (old_chain); }