Skip to content

Commit

Permalink
Most accept/accept4 calls in system/core don't actually want the remo…
Browse files Browse the repository at this point in the history
…te address.

So don't write the extra code for it or waste the kernel's time
copying it around.

Change-Id: I93de64064c2d4fe58ba5b5322cfa69bf31a76dad
  • Loading branch information
enh-google committed Aug 23, 2016
1 parent 82b67ff commit 3dcfa3f
Show file tree
Hide file tree
Showing 5 changed files with 11 additions and 34 deletions.
5 changes: 1 addition & 4 deletions adb/socket_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -254,10 +254,7 @@ TEST_F(LocalSocketTest, close_socket_in_CLOSE_WAIT_state) {
ASSERT_TRUE(adb_thread_create(reinterpret_cast<void (*)(void*)>(ClientThreadFunc), nullptr,
&client_thread));

struct sockaddr addr;
socklen_t alen;
alen = sizeof(addr);
int accept_fd = adb_socket_accept(listen_fd, &addr, &alen);
int accept_fd = adb_socket_accept(listen_fd, nullptr, nullptr);
ASSERT_GE(accept_fd, 0);
CloseRdHupSocketArg arg;
arg.socket_fd = accept_fd;
Expand Down
6 changes: 1 addition & 5 deletions debuggerd/debuggerd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -821,12 +821,8 @@ static int do_server() {
ALOGI("debuggerd: starting\n");

for (;;) {
sockaddr_storage ss;
sockaddr* addrp = reinterpret_cast<sockaddr*>(&ss);
socklen_t alen = sizeof(ss);

ALOGV("waiting for connection\n");
int fd = accept4(s, addrp, &alen, SOCK_CLOEXEC | SOCK_NONBLOCK);
int fd = accept4(s, nullptr, nullptr, SOCK_CLOEXEC | SOCK_NONBLOCK);
if (fd == -1) {
ALOGE("accept failed: %s\n", strerror(errno));
continue;
Expand Down
17 changes: 7 additions & 10 deletions init/property_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -227,32 +227,29 @@ int property_set(const char* name, const char* value) {
static void handle_property_set_fd()
{
prop_msg msg;
int s;
int r;
struct ucred cr;
struct sockaddr_un addr;
socklen_t addr_size = sizeof(addr);
socklen_t cr_size = sizeof(cr);
char * source_ctx = NULL;
struct pollfd ufds[1];
const int timeout_ms = 2 * 1000; /* Default 2 sec timeout for caller to send property. */
int nr;

if ((s = accept(property_set_fd, (struct sockaddr *) &addr, &addr_size)) < 0) {
int s = accept(property_set_fd, nullptr, nullptr);
if (s == -1) {
return;
}

/* Check socket options here */
struct ucred cr;
socklen_t cr_size = sizeof(cr);
if (getsockopt(s, SOL_SOCKET, SO_PEERCRED, &cr, &cr_size) < 0) {
close(s);
PLOG(ERROR) << "Unable to receive socket options";
return;
}

static constexpr int timeout_ms = 2 * 1000; /* Default 2 sec timeout for caller to send property. */
struct pollfd ufds[1];
ufds[0].fd = s;
ufds[0].events = POLLIN;
ufds[0].revents = 0;
nr = TEMP_FAILURE_RETRY(poll(ufds, 1, timeout_ms));
int nr = TEMP_FAILURE_RETRY(poll(ufds, 1, timeout_ms));
if (nr == 0) {
LOG(ERROR) << "sys_prop: timeout waiting for uid " << cr.uid << " to send property message.";
close(s);
Expand Down
11 changes: 1 addition & 10 deletions libsysutils/src/SocketListener.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -199,16 +199,7 @@ void SocketListener::runListener() {
continue;
}
if (mListen && FD_ISSET(mSock, &read_fds)) {
sockaddr_storage ss;
sockaddr* addrp = reinterpret_cast<sockaddr*>(&ss);
socklen_t alen;
int c;

do {
alen = sizeof(ss);
c = accept4(mSock, addrp, &alen, SOCK_CLOEXEC);
SLOGV("%s got %d from accept", mSocketName, c);
} while (c < 0 && errno == EINTR);
int c = TEMP_FAILURE_RETRY(accept4(mSock, nullptr, nullptr, SOCK_CLOEXEC));
if (c < 0) {
SLOGE("accept failed (%s)", strerror(errno));
sleep(1);
Expand Down
6 changes: 1 addition & 5 deletions lmkd/lmkd.c
Original file line number Diff line number Diff line change
Expand Up @@ -410,18 +410,14 @@ static void ctrl_data_handler(uint32_t events) {
}

static void ctrl_connect_handler(uint32_t events __unused) {
struct sockaddr_storage ss;
struct sockaddr *addrp = (struct sockaddr *)&ss;
socklen_t alen;
struct epoll_event epev;

if (ctrl_dfd >= 0) {
ctrl_data_close();
ctrl_dfd_reopened = 1;
}

alen = sizeof(ss);
ctrl_dfd = accept(ctrl_lfd, addrp, &alen);
ctrl_dfd = accept(ctrl_lfd, NULL, NULL);

if (ctrl_dfd < 0) {
ALOGE("lmkd control socket accept failed; errno=%d", errno);
Expand Down

0 comments on commit 3dcfa3f

Please sign in to comment.