000
30.11.2008, 00:12 Uhr
~hsoi
Gast
|
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(Message too long). 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:
C++: |
#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"); ||MLC|| dest.sin_port = htons(atoi(argv[3])); /* IP address */
memset(&buffer, 0, sizeof(buffer)); sprintf(buffer, argv[2]); /* server port */ //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); }
|
|