AW: Still much more than 350 sockets needed!
Andrew Haley
aph at redhat.com
Wed Apr 26 12:51:58 UTC 2006
Wiese, Hendrik writes:
> >
> > > Hello again,
> > >
> > > we still need to know how to increase the maximum number of
> > > possible open sockets per IP address! Here we got the problem
> > > that no more than 350 sockets are possible. On another Linux
> > > (based on LFS) it is no problem to open far more than 5.000
> > > connections on the same way. So we know that it is possible.
> > > So how can we break this limitation? Some kind of sysctl?
> > > Kernel patch needed? Anything else?
> > >
> > > It's urgent, so any kind of help would be greatly appreciated.
> > >
> > > Thanks a lot!!!
> > >
> > > regards,
> > > H. Wiese
> > >
> >
> > My /proc/net/sockstat says that i have 541 used sockets on a standard
> > laptop???
> >
> > could you a simplified version of the code to create all these sockets
>
> > the way you do it?
> >
> > That would allow perhaps more people to understand the problem/see for
>
> > themselves.
> >
> > /Thomas
>
> Please try to open that many tcp connections between two IPs and tell me
> if it works!
Try it yourself. I reckon you'll run out of file descriptors before
you hit a socket limit. To do any more you'll have to fork() in the
server and client.
Andrew.
#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>
int
main (int argc, char *argv[])
{
struct sockaddr_in sock, work;
int wsd, sd;
int addlen;
int rv;
sd = socket (AF_INET, SOCK_STREAM, 0);
if (sd == -1)
{
perror ("No socket");
exit (1);
}
sock.sin_family = AF_INET;
sock.sin_port = htons (5000);
sock.sin_addr.s_addr = INADDR_ANY;
rv = bind (sd, (struct sockaddr *) &sock, sizeof (struct sockaddr_in));
if (rv == -1)
{
perror ("Bad Bind");
exit (1);
}
rv = listen (sd, 2);
if (rv == -1)
{
perror ("Bad listen");
exit (1);
}
int i;
for (i = 0;; i++)
{
wsd = accept (sd, (struct sockaddr *) &work, &addlen);
fprintf (stdout, "Connection %d\n", i);
}
while (1);
}
#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 <arpa/inet.h>
int
main (int argc, char *argv[])
{
struct sockaddr_in sock;
int sd;
int addlen;
int rv;
while (1)
{
sd = socket (AF_INET, SOCK_STREAM, 0);
if (sd == -1)
{
perror ("No socket");
exit (1);
}
sock.sin_family = AF_INET;
sock.sin_port = htons (5000);
sock.sin_addr.s_addr = inet_addr("127.0.0.1");
rv = connect (sd, (struct sockaddr *) &sock,
sizeof (struct sockaddr_in));
if (rv == -1)
{
perror ("Bad Connect");
exit (1);
}
}
}
More information about the fedora-devel-list
mailing list