~ubuntu-branches/ubuntu/maverick/openldap/maverick-proposed

« back to all changes in this revision

Viewing changes to servers/slapd/daemon.c

  • Committer: Bazaar Package Importer
  • Author(s): Mathias Gug
  • Date: 2009-09-07 13:41:10 UTC
  • mto: This revision was merged to the branch mainline in revision 19.
  • Revision ID: james.westby@ubuntu.com-20090907134110-jsdrvn0atu1fex4m
Tags: upstream-2.4.18
ImportĀ upstreamĀ versionĀ 2.4.18

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* $OpenLDAP: pkg/ldap/servers/slapd/daemon.c,v 1.380.2.30 2009/07/06 22:25:50 quanah Exp $ */
 
1
/* $OpenLDAP: pkg/ldap/servers/slapd/daemon.c,v 1.380.2.31 2009/08/25 22:44:25 quanah Exp $ */
2
2
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
3
3
 *
4
4
 * Copyright 1998-2009 The OpenLDAP Foundation.
73
73
slap_ssf_t local_ssf = LDAP_PVT_SASL_LOCAL_SSF;
74
74
struct runqueue_s slapd_rq;
75
75
 
 
76
#ifdef LDAP_TCP_BUFFER
 
77
int slapd_tcp_rmem;
 
78
int slapd_tcp_wmem;
 
79
#endif /* LDAP_TCP_BUFFER */
 
80
 
76
81
Listener **slap_listeners = NULL;
77
82
 
78
83
#ifndef SLAPD_LISTEN_BACKLOG
1315
1320
        }
1316
1321
#endif /* HAVE_TLS */
1317
1322
 
 
1323
#ifdef LDAP_TCP_BUFFER
 
1324
        l.sl_tcp_rmem = 0;
 
1325
        l.sl_tcp_wmem = 0;
 
1326
#endif /* LDAP_TCP_BUFFER */
 
1327
 
1318
1328
        port = (unsigned short) lud->lud_port;
1319
1329
 
1320
1330
        tmp = ldap_pvt_url_scheme2proto(lud->lud_scheme);
2081
2091
                        continue;
2082
2092
#endif /* LDAP_CONNECTIONLESS */
2083
2093
 
 
2094
                /* FIXME: TCP-only! */
 
2095
#ifdef LDAP_TCP_BUFFER
 
2096
                if ( 1 ) {
 
2097
                        int origsize, size, realsize, rc;
 
2098
                        socklen_t optlen;
 
2099
                        char buf[ SLAP_TEXT_BUFLEN ];
 
2100
 
 
2101
                        size = 0;
 
2102
                        if ( slap_listeners[l]->sl_tcp_rmem > 0 ) {
 
2103
                                size = slap_listeners[l]->sl_tcp_rmem;
 
2104
                        } else if ( slapd_tcp_rmem > 0 ) {
 
2105
                                size = slapd_tcp_rmem;
 
2106
                        }
 
2107
 
 
2108
                        if ( size > 0 ) {
 
2109
                                optlen = sizeof( origsize );
 
2110
                                rc = getsockopt( SLAP_FD2SOCK( slap_listeners[l]->sl_sd ),
 
2111
                                        SOL_SOCKET,
 
2112
                                        SO_RCVBUF,
 
2113
                                        (void *)&origsize,
 
2114
                                        &optlen );
 
2115
 
 
2116
                                if ( rc ) {
 
2117
                                        int err = sock_errno();
 
2118
                                        Debug( LDAP_DEBUG_ANY,
 
2119
                                                "slapd_daemon_task: getsockopt(SO_RCVBUF) failed errno=%d (%s)\n",
 
2120
                                                err, sock_errstr(err), 0 );
 
2121
                                }
 
2122
 
 
2123
                                optlen = sizeof( size );
 
2124
                                rc = setsockopt( SLAP_FD2SOCK( slap_listeners[l]->sl_sd ),
 
2125
                                        SOL_SOCKET,
 
2126
                                        SO_RCVBUF,
 
2127
                                        (const void *)&size,
 
2128
                                        optlen );
 
2129
 
 
2130
                                if ( rc ) {
 
2131
                                        int err = sock_errno();
 
2132
                                        Debug( LDAP_DEBUG_ANY,
 
2133
                                                "slapd_daemon_task: setsockopt(SO_RCVBUF) failed errno=%d (%s)\n",
 
2134
                                                err, sock_errstr(err), 0 );
 
2135
                                }
 
2136
 
 
2137
                                optlen = sizeof( realsize );
 
2138
                                rc = getsockopt( SLAP_FD2SOCK( slap_listeners[l]->sl_sd ),
 
2139
                                        SOL_SOCKET,
 
2140
                                        SO_RCVBUF,
 
2141
                                        (void *)&realsize,
 
2142
                                        &optlen );
 
2143
 
 
2144
                                if ( rc ) {
 
2145
                                        int err = sock_errno();
 
2146
                                        Debug( LDAP_DEBUG_ANY,
 
2147
                                                "slapd_daemon_task: getsockopt(SO_RCVBUF) failed errno=%d (%s)\n",
 
2148
                                                err, sock_errstr(err), 0 );
 
2149
                                }
 
2150
 
 
2151
                                snprintf( buf, sizeof( buf ),
 
2152
                                        "url=%s (#%d) RCVBUF original size=%d requested size=%d real size=%d", 
 
2153
                                        slap_listeners[l]->sl_url.bv_val, l, origsize, size, realsize );
 
2154
                                Debug( LDAP_DEBUG_ANY,
 
2155
                                        "slapd_daemon_task: %s\n",
 
2156
                                        buf, 0, 0 );
 
2157
                        }
 
2158
 
 
2159
                        size = 0;
 
2160
                        if ( slap_listeners[l]->sl_tcp_wmem > 0 ) {
 
2161
                                size = slap_listeners[l]->sl_tcp_wmem;
 
2162
                        } else if ( slapd_tcp_wmem > 0 ) {
 
2163
                                size = slapd_tcp_wmem;
 
2164
                        }
 
2165
 
 
2166
                        if ( size > 0 ) {
 
2167
                                optlen = sizeof( origsize );
 
2168
                                rc = getsockopt( SLAP_FD2SOCK( slap_listeners[l]->sl_sd ),
 
2169
                                        SOL_SOCKET,
 
2170
                                        SO_SNDBUF,
 
2171
                                        (void *)&origsize,
 
2172
                                        &optlen );
 
2173
 
 
2174
                                if ( rc ) {
 
2175
                                        int err = sock_errno();
 
2176
                                        Debug( LDAP_DEBUG_ANY,
 
2177
                                                "slapd_daemon_task: getsockopt(SO_SNDBUF) failed errno=%d (%s)\n",
 
2178
                                                err, sock_errstr(err), 0 );
 
2179
                                }
 
2180
 
 
2181
                                optlen = sizeof( size );
 
2182
                                rc = setsockopt( SLAP_FD2SOCK( slap_listeners[l]->sl_sd ),
 
2183
                                        SOL_SOCKET,
 
2184
                                        SO_SNDBUF,
 
2185
                                        (const void *)&size,
 
2186
                                        optlen );
 
2187
 
 
2188
                                if ( rc ) {
 
2189
                                        int err = sock_errno();
 
2190
                                        Debug( LDAP_DEBUG_ANY,
 
2191
                                                "slapd_daemon_task: setsockopt(SO_SNDBUF) failed errno=%d (%s)",
 
2192
                                                err, sock_errstr(err), 0 );
 
2193
                                }
 
2194
 
 
2195
                                optlen = sizeof( realsize );
 
2196
                                rc = getsockopt( SLAP_FD2SOCK( slap_listeners[l]->sl_sd ),
 
2197
                                        SOL_SOCKET,
 
2198
                                        SO_SNDBUF,
 
2199
                                        (void *)&realsize,
 
2200
                                        &optlen );
 
2201
 
 
2202
                                if ( rc ) {
 
2203
                                        int err = sock_errno();
 
2204
                                        Debug( LDAP_DEBUG_ANY,
 
2205
                                                "slapd_daemon_task: getsockopt(SO_SNDBUF) failed errno=%d (%s)\n",
 
2206
                                                err, sock_errstr(err), 0 );
 
2207
                                }
 
2208
 
 
2209
                                snprintf( buf, sizeof( buf ),
 
2210
                                        "url=%s (#%d) SNDBUF original size=%d requested size=%d real size=%d", 
 
2211
                                        slap_listeners[l]->sl_url.bv_val, l, origsize, size, realsize );
 
2212
                                Debug( LDAP_DEBUG_ANY,
 
2213
                                        "slapd_daemon_task: %s\n",
 
2214
                                        buf, 0, 0 );
 
2215
                        }
 
2216
                }
 
2217
#endif /* LDAP_TCP_BUFFER */
 
2218
 
2084
2219
                if ( listen( SLAP_FD2SOCK( slap_listeners[l]->sl_sd ), SLAPD_LISTEN_BACKLOG ) == -1 ) {
2085
2220
                        int err = sock_errno();
2086
2221