7.e.Q
22.05.06, 14:31
Ich hab keinen Bock mehr drauf, Lastsimulationen zu programmieren. Ständig stößt man an irgendwelche willkürlich gesetzte Grenzen im System......
So sind wir nun in einem Fedora Core 4 (64bit) an eine sehr eigenartige Grenze gestoßen, in der es uns nicht möglich ist, mehr als 350 SOCK_DGRAM (UDP) Sockets auf einer IP Adresse zu öffnen und darüber zu senden...
SELinux ist deaktiviert.
Ich habe das ganze jetzt mal mit folgendem "Dreizeiler" probiert:
#include <netdb.h>
#include <netinet/in.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
int
main (int argc, char *argv[])
{
struct sockaddr_in sock, work;
int wsd, sd;
socklen_t addlen;
int rv;
int reuse = 1;
for (int i = 0;; i++)
{
sd = socket (PF_INET, SOCK_DGRAM, 0);
if (sd == -1)
{
printf("Error in %i\n", i);
perror ("No socket");
exit (1);
}
sock.sin_family = AF_INET;
sock.sin_port = htons (50000);
sock.sin_addr.s_addr = inet_addr("136.1.255.7");
// setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &reuse, 4);
//rv = bind (sd, (struct sockaddr *) &sock, sizeof (struct sockaddr_in));
char bla[] = {"bla"};
rv = sendto(sd, bla, strlen(bla), 0, (struct sockaddr*)&sock, sizeof(struct sockaddr) );
if (rv == -1)
{
printf("Error in %i\n", i);
perror ("Sending");
exit (1);
}
fprintf (stdout, "Connection %d\n", i);
}
while (1);
}
Dabei steigt er trotz des Filehandle Limits (ulimit -n) von 64000 nach 28140 Sockets aus mit der Fehlermeldung "Resource Temporarily unavailable". Dies tut auch unsere Software. Allerdings schon nach 350 Sockets. :eek:
.
.
.
Connection 28136
Connection 28137
Connection 28138
Connection 28139
Error in 28140
Sending: Resource temporarily unavailable
Und diese Grenze gilt es zu knacken!
Wer kann helfen???
So sind wir nun in einem Fedora Core 4 (64bit) an eine sehr eigenartige Grenze gestoßen, in der es uns nicht möglich ist, mehr als 350 SOCK_DGRAM (UDP) Sockets auf einer IP Adresse zu öffnen und darüber zu senden...
SELinux ist deaktiviert.
Ich habe das ganze jetzt mal mit folgendem "Dreizeiler" probiert:
#include <netdb.h>
#include <netinet/in.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
int
main (int argc, char *argv[])
{
struct sockaddr_in sock, work;
int wsd, sd;
socklen_t addlen;
int rv;
int reuse = 1;
for (int i = 0;; i++)
{
sd = socket (PF_INET, SOCK_DGRAM, 0);
if (sd == -1)
{
printf("Error in %i\n", i);
perror ("No socket");
exit (1);
}
sock.sin_family = AF_INET;
sock.sin_port = htons (50000);
sock.sin_addr.s_addr = inet_addr("136.1.255.7");
// setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &reuse, 4);
//rv = bind (sd, (struct sockaddr *) &sock, sizeof (struct sockaddr_in));
char bla[] = {"bla"};
rv = sendto(sd, bla, strlen(bla), 0, (struct sockaddr*)&sock, sizeof(struct sockaddr) );
if (rv == -1)
{
printf("Error in %i\n", i);
perror ("Sending");
exit (1);
}
fprintf (stdout, "Connection %d\n", i);
}
while (1);
}
Dabei steigt er trotz des Filehandle Limits (ulimit -n) von 64000 nach 28140 Sockets aus mit der Fehlermeldung "Resource Temporarily unavailable". Dies tut auch unsere Software. Allerdings schon nach 350 Sockets. :eek:
.
.
.
Connection 28136
Connection 28137
Connection 28138
Connection 28139
Error in 28140
Sending: Resource temporarily unavailable
Und diese Grenze gilt es zu knacken!
Wer kann helfen???