MCPcopy Create free account
hub / github.com/apache/thrift / _setup_sockopts

Method _setup_sockopts

lib/cpp/src/thrift/transport/TNonblockingServerSocket.cpp:215–320  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

213}
214
215void TNonblockingServerSocket::_setup_sockopts() {
216 int one = 1;
217 if (!isUnixDomainSocket()) {
218 // Set THRIFT_NO_SOCKET_CACHING to prevent 2MSL delay on accept.
219 // This does not work with Domain sockets on most platforms. And
220 // on Windows it completely breaks the socket. Therefore do not
221 // use this on Domain sockets.
222 if (-1 == setsockopt(serverSocket_,
223 SOL_SOCKET,
224 THRIFT_NO_SOCKET_CACHING,
225 cast_sockopt(&one),
226 sizeof(one))) {
227 // NOTE: SO_EXCLUSIVEADDRUSE socket option can only be used by members
228 // of the Administrators security group on Windows XP and earlier. But
229 // we do not target WinXP anymore so no special checks required.
230 int errno_copy = THRIFT_GET_SOCKET_ERROR;
231 TOutput::instance().perror("TNonblockingServerSocket::listen() setsockopt() THRIFT_NO_SOCKET_CACHING ",
232 errno_copy);
233 close();
234 throw TTransportException(TTransportException::NOT_OPEN,
235 "Could not set THRIFT_NO_SOCKET_CACHING",
236 errno_copy);
237 }
238 }
239
240 // Set TCP buffer sizes
241 if (tcpSendBuffer_ > 0) {
242 if (-1 == setsockopt(serverSocket_,
243 SOL_SOCKET,
244 SO_SNDBUF,
245 cast_sockopt(&tcpSendBuffer_),
246 sizeof(tcpSendBuffer_))) {
247 int errno_copy = THRIFT_GET_SOCKET_ERROR;
248 TOutput::instance().perror("TNonblockingServerSocket::listen() setsockopt() SO_SNDBUF ", errno_copy);
249 close();
250 throw TTransportException(TTransportException::NOT_OPEN,
251 "Could not set SO_SNDBUF",
252 errno_copy);
253 }
254 }
255
256 if (tcpRecvBuffer_ > 0) {
257 if (-1 == setsockopt(serverSocket_,
258 SOL_SOCKET,
259 SO_RCVBUF,
260 cast_sockopt(&tcpRecvBuffer_),
261 sizeof(tcpRecvBuffer_))) {
262 int errno_copy = THRIFT_GET_SOCKET_ERROR;
263 TOutput::instance().perror("TNonblockingServerSocket::listen() setsockopt() SO_RCVBUF ", errno_copy);
264 close();
265 throw TTransportException(TTransportException::NOT_OPEN,
266 "Could not set SO_RCVBUF",
267 errno_copy);
268 }
269 }
270
271 // Turn linger off, don't want to block on calls to close
272 struct linger ling = {0, 0};

Callers

nothing calls this directly

Calls 4

cast_sockoptFunction · 0.70
TTransportExceptionClass · 0.70
const_cast_sockoptFunction · 0.70
perrorMethod · 0.45

Tested by

no test coverage detected