static int swClient_close(swClient *cli) { int fd = cli->socket->fd; int ret; #ifdef SW_USE_OPENSSL if (cli->open_ssl && cli->ssl_context) { if (cli->socket->ssl) { swSSL_close(cli->socket); } swSSL_free_context(cli->ssl_context); if (cli->ssl_cert_file) { free(cli->ssl_cert_file); } if (cli->ssl_key_file) { free(cli->ssl_key_file); } } #endif //clear buffer if (cli->buffer) { swString_free(cli->buffer); cli->buffer = NULL; } if (cli->async) { //remove from reactor SwooleG.main_reactor->del(SwooleG.main_reactor, fd); cli->socket->closed = 1; //onClose callback if (cli->socket->active && cli->onClose) { cli->onClose(cli); } ret = swReactor_close(SwooleG.main_reactor, fd); } else { bzero(cli->socket, sizeof(swConnection)); ret = close(fd); } cli->closed = 1; if (cli->type == SW_SOCK_UNIX_DGRAM) { unlink(cli->socket->info.addr.un.sun_path); } return ret; }
static int swClient_close(swClient *cli) { int fd = cli->socket->fd; int ret; if (cli->async) { ret = swReactor_close(SwooleG.main_reactor, fd); } else { bzero(cli->socket, sizeof(swConnection)); ret = close(fd); } if (cli->type == SW_SOCK_UNIX_DGRAM) { unlink(cli->client_addr.addr.un.sun_path); } return ret; }