socket_utils_posix.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
20 
22 
23 #ifdef GRPC_POSIX_SOCKETUTILS
24 
25 #include <fcntl.h>
26 #include <sys/socket.h>
27 #include <unistd.h>
28 
29 #include <grpc/support/log.h>
30 
33 
34 int grpc_accept4(int sockfd, grpc_resolved_address* resolved_addr, int nonblock,
35  int cloexec) {
36  int fd, flags;
37  fd = accept(sockfd, reinterpret_cast<grpc_sockaddr*>(resolved_addr->addr),
38  &resolved_addr->len);
39  if (fd >= 0) {
40  if (nonblock) {
41  flags = fcntl(fd, F_GETFL, 0);
42  if (flags < 0) goto close_and_error;
43  if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) != 0) goto close_and_error;
44  }
45  if (cloexec) {
46  flags = fcntl(fd, F_GETFD, 0);
47  if (flags < 0) goto close_and_error;
48  if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) != 0) goto close_and_error;
49  }
50  }
51  return fd;
52 
53 close_and_error:
54  close(fd);
55  return -1;
56 }
57 
58 #endif /* GRPC_POSIX_SOCKETUTILS */
log.h
grpc_resolved_address
Definition: resolved_address.h:34
sockaddr.h
grpc_accept4
int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, int nonblock, int cloexec)
close
#define close
Definition: test-fs.c:48
grpc_resolved_address::len
socklen_t len
Definition: resolved_address.h:36
absl::flags_internal
Definition: abseil-cpp/absl/flags/commandlineflag.h:40
port.h
socket_utils_posix.h
flags
uint32_t flags
Definition: retry_filter.cc:632
grpc_resolved_address::addr
char addr[GRPC_MAX_SOCKADDR_SIZE]
Definition: resolved_address.h:35
port_platform.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:19