Skip to content

Support listen() for tcp wrapper#2763

Merged
stevenengler merged 2 commits intoshadow:mainfrom
stevenengler:wrap-tcp-rust
Feb 24, 2023
Merged

Support listen() for tcp wrapper#2763
stevenengler merged 2 commits intoshadow:mainfrom
stevenengler:wrap-tcp-rust

Conversation

@stevenengler
Copy link
Copy Markdown
Contributor

@stevenengler stevenengler commented Feb 23, 2023

The logic generally follows the logic from src/main/host/syscall/socket.c.

SysCallReturn syscallhandler_listen(SysCallHandler* sys,
const SysCallArgs* args) {
int sockfd = args->args[0].as_i64;
int backlog = args->args[1].as_i64;
trace("trying to listen on socket %i", sockfd);
/* Get and validate the TCP socket. */
TCP* tcp_desc = NULL;
int errcode =
_syscallhandler_validateTCPSocketHelper(sys, sockfd, &tcp_desc);
if (errcode < 0) {
return syscallreturn_makeDoneErrno(-errcode);
}
utility_debugAssert(tcp_desc);
/* only listen on the socket if it is not used for other functions */
if (!tcp_isListeningAllowed(tcp_desc)) {
debug("Cannot listen on previously used socket %i", sockfd);
return syscallreturn_makeDoneErrno(EOPNOTSUPP);
}
/* if we are already listening, just update the backlog and return 0. */
if (tcp_isValidListener(tcp_desc)) {
trace("Socket %i already set up as a listener; updating backlog", sockfd);
tcp_updateServerBacklog(tcp_desc, backlog);
return syscallreturn_makeDoneU64(0);
}
/* We are allowed to listen but not already listening, start now. */
if (!legacysocket_isBound((LegacySocket*)tcp_desc)) {
/* Implicit bind: bind to all interfaces at an ephemeral port. */
trace("Implicitly binding listener socket %i", sockfd);
errcode =
_syscallhandler_bindHelper(sys, (LegacySocket*)tcp_desc, htonl(INADDR_ANY), 0, 0, 0);
if (errcode < 0) {
return syscallreturn_makeDoneErrno(-errcode);
}
}
tcp_enterServerMode(
tcp_desc, _syscallhandler_getHost(sys), _syscallhandler_getProcess(sys), backlog);
return syscallreturn_makeDoneU64(0);
}

@stevenengler stevenengler self-assigned this Feb 23, 2023
@github-actions github-actions bot added the Component: Main Composing the core Shadow executable label Feb 23, 2023
@stevenengler stevenengler merged commit 82353d9 into shadow:main Feb 24, 2023
@stevenengler stevenengler deleted the wrap-tcp-rust branch February 24, 2023 00:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Component: Main Composing the core Shadow executable

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants