From 7742a59ec8549c240000441fcbb92bb84b7d4d4b Mon Sep 17 00:00:00 2001 From: Razvan Deaconescu Date: Sat, 21 May 2011 13:25:26 +0300 Subject: [PATCH] raw: Add state to determine wether socket is bound or not. --- src/raw/swift_raw.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/raw/swift_raw.c b/src/raw/swift_raw.c index cc1109a..2761b21 100644 --- a/src/raw/swift_raw.c +++ b/src/raw/swift_raw.c @@ -32,11 +32,17 @@ enum sock_rw_state { STATE_SHUT_RDWR }; +enum sock_bind_state { + STATE_NOTBOUND, + STATE_BOUND +}; + /* socket management structure */ struct sock_list { int s; struct sockaddr_sw addr; enum sock_rw_state rw_state; + enum sock_bind_state bind_state; struct sock_list *next; struct sock_list *prev; }; @@ -106,9 +112,12 @@ static struct sock_list *list_elem_from_address(__CONST_SOCKADDR_ARG addr) { struct sock_list *ptr; - for (ptr = sock_list_head.next; ptr != &sock_list_head; ptr = ptr->next) + for (ptr = sock_list_head.next; ptr != &sock_list_head; ptr = ptr->next) { + if (ptr->bind_state == STATE_NOTBOUND) + continue; if (memcmp(&ptr->addr, addr, sizeof(addr)) == 0) return ptr; + } return NULL; } @@ -145,6 +154,19 @@ static int list_remove_socket(int s) return 0; } +static int list_socket_is_bound(int s) +{ + struct sock_list *ptr; + + for (ptr = sock_list_head.next; ptr != &sock_list_head; ptr = ptr->next) + if (ptr->s == s) { + if (ptr->bind_state == STATE_BOUND) + return 1; + break; + } + + return 0; +} /* * Create a new socket of type TYPE in domain DOMAIN, using -- 2.20.1