while (s < sockets + NSOCKET) {
if (s->s_state == SS_UNUSED) {
s->s_state = SS_INIT;
+ s->s_iflag = 0;
irqrestore(irq);
return s;
}
struct socket *sock_alloc_accept(struct socket *s)
{
struct socket *n = alloc_socket();
+ int sockno;
if (n == NULL)
return NULL;
+ sockno = n->s_num;
memcpy(n, s, sizeof(*n));
+ n->s_num = sockno;
n->s_state = SS_ACCEPTING;
n->s_data = s->s_num;
return n;
udata.u_error = EALREADY;
return -1;
}
-
+
/* Needs locking versus interrupts */
- while ((n = sock_pending(s)) != NULL) {
+ while ((n = sock_pending(s)) == NULL) {
if (psleep_flags(s, flag))
return -1;
if (s->s_error)
struct socket *s = sockets;
uint8_t n = 0;
while (s < sockets + NSOCKET)
- s++->s_num = n;
+ s++->s_num = n++;
netdev_init();
}