[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: close connection with shutdown(,SHUT_RDWR) (ITS#2265)
This is fixed in 2.1.12.
At 02:58 AM 1/14/2003, ldidillon@prologue-software.fr wrote:
>Full_Name: lise Didillon
>Version: 2.0.27
>OS: linux kernel 2.4.18 or Mandrake 7.2 with kernel 2.2.14
>URL: ftp://ftp.openldap.org/incoming/
>Submission from: (NULL) (193.252.109.90)
>
>
>SHUT_RDWR is defined and non null in /usr/include/sys/socket.h (glibc 2.2.5)
>
>enum
>{
> SHUT_RD = 0, /* No more receptions. */
>#define SHUT_RD SHUT_RD
> SHUT_WR, /* No more transmissions. */
>#define SHUT_WR SHUT_WR
> SHUT_RDWR /* No more receptions or transmissions. */
>#define SHUT_RDWR SHUT_RDWR
>};
>
>
>but in openldap-2.27/include/ac/socket.h you have:
>#else
># define tcp_read( s, buf, len) read( s, buf, len )
># define tcp_write( s, buf, len) write( s, buf, len )
>
>
># if SHUT_RDWR
># define tcp_close( s ) (shutdown( s, SHUT_RDWR ), close( s ))
>#else
># define tcp_close( s ) close( s )
>#endif
>
>and it's like SHUT_DOWN was null and so tcp_close( s ) call only close( s)
>
>If I put
># ifdef SHUT_RDWR
>instead of
># if SHUT_RDWR
>then slapd make a shutdown(,SHUT_RDWR) before calling close()
>I do that because we got many and many connection in FIN_WAIT or CLOSE_WAIT
>state. Now it's better. I already reported this bug for openldap-2.0.15 but not
>on the good mailing list.
>
>here a C code example to reproduce:
>
>#include <stdio.h>
>#include <sys/socket.h>
>
>#ifdef SHUT_RDWR
>#define Myprint1() printf ("SHUT_RDWR defined\n")
>#else
>#define Myprint1() printf ("SHUT_RDWR not defined\n")
>#endif
>
>#if SHUT_RDWR
>#define Myprint2() printf ("SHUT_RDWR != 0\n")
>#else
>#define Myprint2() printf ("SHUT_RDWR == 0\n")
>#endif
>
>/* ----------------------------- */
> main (int argc, char *argv[])
>/* ----------------------------- */
>{
> int shut;
>
> shut= SHUT_RDWR;
> printf ("SHUT_RDWR = %d\n",shut);
> Myprint1();
> Myprint2();
> return (0);
>} /* main */
>
>running this code has the following result:
>
>SHUT_RDWR=2
>SHUT_RDWR defined
>SHUT_RDWR == 0
>
>I use gcc 2.95.2 or 2.95.3
>
>thank you for your help.
>best regards,
>
>Lise DIDILLON