- switch(ssl_err)
- {
- case GNUTLS_E_INTERRUPTED:
- if(rb_ignore_errno(errno))
- case GNUTLS_E_AGAIN:
- {
- int flags;
-
- if(gnutls_record_get_direction((gnutls_session_t) new_F->ssl))
- flags = RB_SELECT_WRITE;
- else
- flags = RB_SELECT_READ;
-
- new_F->ssl_errno = ssl_err;
- rb_setselect(new_F, flags, rb_ssl_tryaccept, NULL);
- return;
- }
- break;
- default:
- new_F->ssl_errno = ssl_err;
- new_F->accept->callback(new_F, RB_ERROR_SSL, NULL, 0, new_F->accept->data);
- return;
- }
- }
- else
- {
- struct acceptdata *ad;
-
- rb_settimeout(new_F, 0, NULL, NULL);
- rb_setselect(new_F, RB_SELECT_READ | RB_SELECT_WRITE, NULL, NULL);
-
- ad = new_F->accept;
- new_F->accept = NULL;
- ad->callback(new_F, RB_OK, (struct sockaddr *) &ad->S, ad->addrlen,
- ad->data);
+ struct acceptdata *ad = F->accept;
+ F->accept = NULL;
+ ad->callback(F, RB_OK, (struct sockaddr *)&ad->S, ad->addrlen, ad->data);