Add ioctl support for FIONBIO command

This commit is contained in:
LI Qing 2020-10-15 11:25:57 +08:00 committed by Zongmin.Gu
parent d590486029
commit 28f47dacce
2 changed files with 22 additions and 0 deletions

@ -30,6 +30,8 @@ impl_ioctl_nums_and_cmds! {
TIOCGWINSZ => (0x5413, mut WinSize),
// Set window size
TIOCSWINSZ => (0x5414, WinSize),
// Set the nonblocking mode for socket
FIONBIO => (0x5421, i32),
// If the given terminal was the controlling terminal of the calling process, give up this
// controlling terminal. If the process was session leader, then send SIGHUP and SIGCONT to
// the foreground process group and all processes in the current session lose their controlling

@ -274,6 +274,25 @@ int test_ioctl_SIOCGIFCONF(void) {
return 0;
}
int test_ioctl_FIONBIO(void) {
int sock = socket(AF_INET, SOCK_STREAM, 0);
int on = 1;
if (ioctl(sock, FIONBIO, &on) < 0) {
close(sock);
THROW_ERROR("ioctl FIONBIO failed");
}
int actual_flags = fcntl(sock, F_GETFL);
if ((actual_flags & O_NONBLOCK) == 0) {
close(sock);
THROW_ERROR("failed to check the O_NONBLOCK flag after FIONBIO");
}
close(sock);
return 0;
}
// ============================================================================
// Test suite
// ============================================================================
@ -286,6 +305,7 @@ static test_case_t test_cases[] = {
TEST_CASE(test_sgx_ioctl_SGXIOC_SELF_TARGET),
TEST_CASE(test_sgx_ioctl_SGXIOC_CREATE_AND_VERIFY_REPORT),
TEST_CASE(test_ioctl_SIOCGIFCONF),
TEST_CASE(test_ioctl_FIONBIO),
};
int main() {