|
| Socket problem Fra : Janosh |
Dato : 16-06-04 09:22 |
|
Hej NG
Jeg har et lille problem med et c++ prgogram som er flyttet fra HP-UX
til AIX.
Programmet danne en email som sendes via en socket forbindelse til
sendmail.
Problemet er at ca. en gang om måneden fejler programmet med:
11:55:07 ** errno = 24, message = Too many open files **
11:55:07 ** Error in file email.cpp at line 60, function
eMail::Connect **
Problemet fandtes ikke da programmet kørte på HP-UX, og jeg er ret
sikker på at jeg rydder op efter mig.
Er der nogen som har en idé, evt noget opsætning af AIX eller
sendmail.
På forhånd tak.
Mvh. Janosh
| |
Jesper Toft (17-06-2004)
| Kommentar Fra : Jesper Toft |
Dato : 17-06-04 10:54 |
|
Janosh wrote:
> 11:55:07 ** errno = 24, message = Too many open files **
> 11:55:07 ** Error in file email.cpp at line 60, function
> eMail::Connect **
>
> Problemet fandtes ikke da programmet kørte på HP-UX, og jeg er ret
> sikker på at jeg rydder op efter mig.
Det kunne nu godt tyde på at du enten har for mange aktive connection på en
gang eller glemmer at lukke dem du ikke bruger mere.
Prøv at lave en "ulimit -n". Det vil fortælle dig hvor mange åbne
connections/filer dit program må have.
Dette tal svinger meget fra system til system. Fx har linux et limit på
1024, hvorimod openbsd, vidt jeg husker, har et standard bruger limit på
64.
Så problemet findes sikkert også på din HPUX, men du opdager det ikke hvis
dit limit er meget stort.
--
/Jesper
| |
Janosh (18-06-2004)
| Kommentar Fra : Janosh |
Dato : 18-06-04 14:13 |
|
Tak for hjælpen.
ulimit -n siger 4000
Jeg har sat en counter ind i mig program for at finde ud af om det er
et oprydnings problem. For at se om programmet fejler efter 4000
mails.
Når jeg ser i koden kan jeg se at jeg har erstattet en close(socket)
med shutdown(socket, 2).
Måske skal tilføje close efter shutdown?
Med venlig hilsen
Janosh
| |
Jesper Toft (19-06-2004)
| Kommentar Fra : Jesper Toft |
Dato : 19-06-04 19:59 |
|
Janosh wrote:
> Når jeg ser i koden kan jeg se at jeg har erstattet en close(socket)
> med shutdown(socket, 2).
> Måske skal tilføje close efter shutdown?
close() skulle være nok. shutdown() er blot til at lukke dele af
forbindelse, hvor close lukker det hele og frigiver fd'et.
Hvis du virkelig skal bruge shutdown() skal du også lave en close()
efterfølgende.
--
/Jesper
| |
|
|