Add ioctl support for FIONBIO command
This commit is contained in:
parent
d590486029
commit
28f47dacce
@ -30,6 +30,8 @@ impl_ioctl_nums_and_cmds! {
|
|||||||
TIOCGWINSZ => (0x5413, mut WinSize),
|
TIOCGWINSZ => (0x5413, mut WinSize),
|
||||||
// Set window size
|
// Set window size
|
||||||
TIOCSWINSZ => (0x5414, WinSize),
|
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
|
// 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
|
// 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
|
// 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;
|
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
|
// 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_SELF_TARGET),
|
||||||
TEST_CASE(test_sgx_ioctl_SGXIOC_CREATE_AND_VERIFY_REPORT),
|
TEST_CASE(test_sgx_ioctl_SGXIOC_CREATE_AND_VERIFY_REPORT),
|
||||||
TEST_CASE(test_ioctl_SIOCGIFCONF),
|
TEST_CASE(test_ioctl_SIOCGIFCONF),
|
||||||
|
TEST_CASE(test_ioctl_FIONBIO),
|
||||||
};
|
};
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
Loading…
Reference in New Issue
Block a user