Plug plug;
void *private_ptr;
bufchain output_data;
- int connected;
+ int connected; /* irrelevant for listening sockets */
int writable;
int frozen; /* this causes readability notifications to be ignored */
int frozen_readable; /* this means we missed at least one readability
ret->oobpending = FALSE;
ret->listener = 0;
ret->addr = NULL;
+ ret->connected = 1;
ret->s = sockfd;
static void uxsel_tell(Actual_Socket s)
{
int rwx = 0;
- if (!s->connected)
- rwx |= 2; /* write == connect */
- if (s->connected && !s->frozen)
- rwx |= 1 | 4; /* read, except */
- if (bufchain_size(&s->output_data))
- rwx |= 2; /* write */
- if (s->listener)
- rwx |= 1; /* read == accept */
+ if (s->listener) {
+ rwx |= 1; /* read == accept */
+ } else {
+ if (!s->connected)
+ rwx |= 2; /* write == connect */
+ if (s->connected && !s->frozen)
+ rwx |= 1 | 4; /* read, except */
+ if (bufchain_size(&s->output_data))
+ rwx |= 2; /* write */
+ }
uxsel_set(s->s, rwx, net_select_result);
}