+ struct sock_list *ptr;
+
+ for (ptr = sock_list_head.next; ptr != &sock_list_head; ptr = ptr->next)
+ if (ptr->s == s)
+ return ptr;
+
+ return NULL;
+}
+
+/*
+ * Find socket in socket management list by address.
+ */
+
+static struct sock_list *list_get_link_by_address(const struct sockaddr *addr)
+{
+ struct sock_list *ptr;
+
+ for (ptr = sock_list_head.next; ptr != &sock_list_head; ptr = ptr->next)
+ if (memcmp(addr, &ptr->addr, sizeof(*addr)) == 0)
+ return ptr;
+
+ return NULL;
+}
+
+/*
+ * Unlink socket from list. Called by sm_del.
+ */
+
+static void list_unlink(struct sock_list *ptr)
+{
+ ptr->next->prev = ptr->prev;
+ ptr->prev->next = ptr->next;
+ ptr->next = ptr;
+ ptr->prev = ptr;
+}
+
+/*
+ * Link socket to list. Add socket to tail of list.
+ */