summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/kern/sys_socket.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-12-13 16:14:43 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-12-16 15:35:51 +0100
commit06ad80cbdadd3fb79da4f1245731f2c8a59f7ffd (patch)
treea71be2cab7d2f70ebaa65df726aa8e5b5377f7c5 /freebsd/sys/kern/sys_socket.c
parentBPF(4): Add support (diff)
downloadrtems-libbsd-06ad80cbdadd3fb79da4f1245731f2c8a59f7ffd.tar.bz2
SOCKET(2): Add some FCNTL(2) support
Diffstat (limited to 'freebsd/sys/kern/sys_socket.c')
-rw-r--r--freebsd/sys/kern/sys_socket.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/freebsd/sys/kern/sys_socket.c b/freebsd/sys/kern/sys_socket.c
index 08777991..3508f94f 100644
--- a/freebsd/sys/kern/sys_socket.c
+++ b/freebsd/sys/kern/sys_socket.c
@@ -470,6 +470,21 @@ rtems_bsd_soo_close(rtems_libio_t *iop)
return rtems_bsd_error_to_status_and_errno(error);
}
+static int
+rtems_bsd_soo_fcntl(rtems_libio_t *iop, int cmd)
+{
+ int error = 0;
+
+ if (cmd == F_SETFL) {
+ struct file *fp = rtems_bsd_iop_to_fp(iop);
+ int nbio = iop->flags & LIBIO_FLAGS_NO_DELAY;
+
+ error = soo_ioctl(fp, FIONBIO, &nbio, NULL, NULL);
+ }
+
+ return rtems_bsd_error_to_status_and_errno(error);
+}
+
const rtems_filesystem_file_handlers_r socketops = {
.open_h = rtems_filesystem_default_open,
.close_h = rtems_bsd_soo_close,
@@ -481,7 +496,7 @@ const rtems_filesystem_file_handlers_r socketops = {
.ftruncate_h = rtems_filesystem_default_ftruncate,
.fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
.fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
- .fcntl_h = rtems_filesystem_default_fcntl,
+ .fcntl_h = rtems_bsd_soo_fcntl,
.poll_h = rtems_bsd_soo_poll,
.kqfilter_h = rtems_bsd_soo_kqfilter
};