UDP-Socket: Nachricht ist zu lang, was tun?



  • hi,

    hab hier ein Programm mit dem ich UDP-Pakete erzeugen kann,wenn ich jetzt aber eine zu große Nachricht auf den Weg schicke schlägt das senden fehl. Kann ich irgendwie dem socket sagen er soll alleine fragmentieren oder muss ich das im vorfeld erledigen und dann sendto mit passenden packetgrößen aufrufen?

    Hier mal mein code:

    #include <stdio.h>
              #include <sys/socket.h>
              #include <arpa/inet.h>
              #include <stdlib.h>
              #include <string.h>
              #include <unistd.h>
              #include <netinet/in.h>
    
              #define BUFFSIZE 25000
              void Die(char *mess) { perror(mess); exit(1); }
    
              int main(int argc, char *argv[]) {
                int sock;
                struct sockaddr_in dest;
                char buffer[BUFFSIZE];
                unsigned int echolen;
    
                if (argc != 4) {
                  fprintf(stderr, "USAGE: %s <server_ip> <word> <port>\n", argv[0]);
                  exit(1);
                }
    
                /* Create the UDP socket */
                if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
                  Die("Failed to create socket");
                }
                /* Construct the server sockaddr_in structure */
                memset(&dest, 0, sizeof(dest));       /* Clear struct */
                dest.sin_family = AF_INET;                  /* Internet/IP */
    			dest.sin_addr.s_addr = inet_addr(argv[1]);  /* IP address */
               // dest.sin_addr.s_addr = inet_addr("192.168.2.102");  /* IP address */
                dest.sin_port = htons(atoi(argv[3]));       /* server port */
    
    			memset(&buffer, 0, sizeof(buffer));
    			sprintf(buffer, argv[2]);
    
                /* Send the word to the server */
                //echolen = strlen(argv[2]);
                if (sendto(sock, buffer, BUFFSIZE, 0,
                           (struct sockaddr *) &dest,
                           sizeof(dest)) != echolen) {
                  Die("Mismatch in number of sent bytes");
                }
    
                close(sock);
                exit(0);
              }
    


  • Keiner eine Idee warum die Fragmentierung nich funktioniert ?


Anmelden zum Antworten