-
Notifications
You must be signed in to change notification settings - Fork 209
Open
Description
fcntl
doesn't implement O_NONBLOCK
for wasi:socket
handles
See
wasi-libc/libc-bottom-half/cloudlibc/src/libc/fcntl/fcntl.c
Lines 10 to 61 in 1b19fc6
int fcntl(int fildes, int cmd, ...) { | |
switch (cmd) { | |
case F_GETFD: | |
// Act as if the close-on-exec flag is always set. | |
return FD_CLOEXEC; | |
case F_SETFD: | |
// The close-on-exec flag is ignored. | |
return 0; | |
case F_GETFL: { | |
// Obtain the flags and the rights of the descriptor. | |
__wasi_fdstat_t fds; | |
__wasi_errno_t error = __wasi_fd_fdstat_get(fildes, &fds); | |
if (error != 0) { | |
errno = error; | |
return -1; | |
} | |
// Roughly approximate the access mode by converting the rights. | |
int oflags = fds.fs_flags; | |
if ((fds.fs_rights_base & | |
(__WASI_RIGHTS_FD_READ | __WASI_RIGHTS_FD_READDIR)) != 0) { | |
if ((fds.fs_rights_base & __WASI_RIGHTS_FD_WRITE) != 0) | |
oflags |= O_RDWR; | |
else | |
oflags |= O_RDONLY; | |
} else if ((fds.fs_rights_base & __WASI_RIGHTS_FD_WRITE) != 0) { | |
oflags |= O_WRONLY; | |
} else { | |
oflags |= O_SEARCH; | |
} | |
return oflags; | |
} | |
case F_SETFL: { | |
// Set new file descriptor flags. | |
va_list ap; | |
va_start(ap, cmd); | |
int flags = va_arg(ap, int); | |
va_end(ap); | |
__wasi_fdflags_t fs_flags = flags & 0xfff; | |
__wasi_errno_t error = | |
__wasi_fd_fdstat_set_flags(fildes, fs_flags); | |
if (error != 0) { | |
errno = error; | |
return -1; | |
} | |
return 0; | |
} | |
default: | |
errno = EINVAL; | |
return -1; | |
} |
Metadata
Metadata
Assignees
Labels
No labels