From d7691de14af1a30ea1173511b08d1ad7b8512b72 Mon Sep 17 00:00:00 2001 From: Razvan Deaconescu Date: Sat, 21 May 2011 12:41:13 +0300 Subject: [PATCH] raw: Add sw_close "syscall". sw_close is required by the internal management functions: remove socket element when sw_close is called. --- src/raw/swift_raw.c | 22 ++++++++++++++++++++++ src/raw/swift_raw.h | 6 ++++++ 2 files changed, 28 insertions(+) diff --git a/src/raw/swift_raw.c b/src/raw/swift_raw.c index 8c5b432..3809986 100644 --- a/src/raw/swift_raw.c +++ b/src/raw/swift_raw.c @@ -355,3 +355,25 @@ list_elem_err: list_unlink_err: return -1; } + +/* + * Close file descriptor for socket FD. + * Returns 0 on success, -1 for errors. + */ +int sw_close (int __fd) +{ + struct sock_list *list; + + /* Remove socket from socket management structure. */ + list = list_unlink_socket(__fd); + if (list == NULL) { + errno = EBADF; + goto list_unlink_err; + } + + /* Call classical interface of close(2). */ + return close(__fd); + +list_unlink_err: + return -1; +} diff --git a/src/raw/swift_raw.h b/src/raw/swift_raw.h index 5724212..fd83ac2 100644 --- a/src/raw/swift_raw.h +++ b/src/raw/swift_raw.h @@ -116,6 +116,12 @@ extern int sw_setsockopt (int __fd, int __level, int __optname, */ extern int sw_shutdown (int __fd, int __how) __THROW; +/* + * Close file descriptor for socket FD. + * Returns 0 on success, -1 for errors. + */ +extern int sw_close (int __fd); + #ifdef __cplusplus } #endif -- 2.20.1