• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ close_client函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中close_client函数的典型用法代码示例。如果您正苦于以下问题:C++ close_client函数的具体用法?C++ close_client怎么用?C++ close_client使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了close_client函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: remote_recv_cb

static void
remote_recv_cb(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) {
    struct remote_context *remote;
    struct client_context *client;

    remote = stream->data;
    client = remote->client;

    if (nread > 0) {
        reset_timer(remote);
        uv_read_stop(&remote->handle.stream);
        int clen = nread + PRIMITIVE_BYTES;
        uint8_t *c = remote->buf + HEADER_BYTES;
        int rc = crypto_encrypt(c, (uint8_t*)buf->base, nread);
        if (!rc) {
            forward_to_client(client, c, clen);
        } else {
            logger_log(LOG_ERR, "invalid tcp packet");
            close_client(client);
            close_remote(remote);
        }

    } else if (nread < 0){
        if (nread != UV_EOF) {
            logger_log(LOG_ERR, "receive from %s failed: %s", client->target_addr, uv_strerror(nread));
        }
        close_client(client);
        close_remote(remote);
    }
}
开发者ID:nsdown,项目名称:xsocks-1,代码行数:30,代码来源:xsocksd_remote.c


示例2: while

void *response_handler(void *arg) {
    int nfd;
    fd_set read_set;
    struct timeval tv;
    tv.tv_sec = 0;
    tv.tv_usec = 100;

    while (1) {
        FD_ZERO(&read_set);
        FD_SET(sock, &read_set);

        nfd = select(sock + 1, &read_set, NULL, NULL, &tv);
        if (nfd > 0) {
            int len, recvIsDone = 0;
            user->buf_len = 0;
            while (!recvIsDone) {
                if ((len = recv(sock, user->buf, 1, 0)) > 0) {
                    if(user->buf[0] == ',') {
                        user->type[user->buf_len++] = '\0';
                        // printf("%s\n", user->type);
                        serve_response();
                        recvIsDone = 1;
                    } else
                        user->type[user->buf_len++] = user->buf[0];
                } else if (len == 0) {
                    puts("disconnected");
                    close_client();
                } else if (len == -1) {
                    puts("recv failed");
                    close_client();
                }
            }    
        }
    }
}
开发者ID:urchinfinity,项目名称:chatroom,代码行数:35,代码来源:client.c


示例3: client_recv_cb

static void
client_recv_cb(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) {
    struct client_context *client = stream->data;
    struct remote_context *remote = client->remote;
    int clen;

    if (nread > 0) {
        reset_timer(remote);
        uv_read_stop(&client->handle.stream);

        switch (client->stage) {
        case XSTAGE_HANDSHAKE:
            if (verify_methods(buf->base, nread)) {
                handshake(client);
            } else {
                logger_log(LOG_ERR, "invalid method packet");
                close_client(client);
                close_remote(remote);
            }

            break;

        case XSTAGE_REQUEST:
            if (verify_request(buf->base, nread)) {
                request_start(client, buf->base);
            } else {
                logger_log(LOG_ERR, "invalid request packet");
                close_client(client);
                close_remote(remote);
            }

            break;

        case XSTAGE_FORWARD:
            clen = nread + PRIMITIVE_BYTES;
            uint8_t *c = client->buf + HEADER_BYTES;
            int rc = crypto_encrypt(c, (uint8_t*)buf->base, nread);
            if (rc) {
                logger_log(LOG_ERR, "encrypt failed");
                close_client(client);
                close_remote(remote);
            }
            forward_to_remote(remote, c, clen);

            break;

        default:
            break;
        }

    } else if (nread < 0) {
        if (nread != UV_EOF) {
            char addrbuf[INET6_ADDRSTRLEN + 1] = {0};
            uint16_t port = ip_name(&client->addr, addrbuf, sizeof addrbuf);
            logger_log(LOG_ERR, "receive from %s:%d failed: %s", addrbuf, port, uv_strerror(nread));
        }
        close_client(client);
        close_remote(remote);
    }
}
开发者ID:road0001,项目名称:xsocks,代码行数:60,代码来源:xsocks_client.c


示例4: on_read

void on_read( SP_TestClient * client, SP_TestEvent * event )
{
	char buffer[ 4096 ] = { 0 };
	int bytesTransferred = recv( (int)client->mFd, buffer, sizeof( buffer ), 0 );

	if( bytesTransferred <= 0 ) {
		if( bytesTransferred < 0 ) {
			printf( "recv fail, errno %d\n", WSAGetLastError() );
			gStat.mRecvFail++;
		}
		close_client( client );
		return;
	}

	for( int i = 0; i < bytesTransferred; i++ ) {
		if( '\n' == buffer[i] ) client->mRecvMsgs++;
	}

	memset( &( event->mOverlapped ), 0, sizeof( OVERLAPPED ) );
	event->mType = SP_TestEvent::eEventRecv;
	event->mWsaBuf.buf = NULL;
	event->mWsaBuf.len = 0;

	DWORD recvBytes = 0, flags = 0;
	if( SOCKET_ERROR == WSARecv( (SOCKET)client->mFd, &( event->mWsaBuf ), 1,
			&recvBytes, &flags, &( event->mOverlapped ), NULL ) ) {
		if( ERROR_IO_PENDING != WSAGetLastError() ) {
			gStat.mWSARecvFail++;
			printf( "WSARecv fail, errno %d\n", WSAGetLastError() );
			close_client( client );
		}
	}
}
开发者ID:CCoder123,项目名称:pproj,代码行数:33,代码来源:testiocpstress.cpp


示例5: on_write

void on_write( int fd, short events, void *arg )
{
	SP_TestClient * client = ( SP_TestClient * ) arg;

	if( EV_WRITE & events ) {
		client->mSendMsgs++;

		if( client->mSendMsgs >= gMsgs ) {
			snprintf( client->mBuffer, sizeof( client->mBuffer ), "quit\n" );
		} else {
			snprintf( client->mBuffer, sizeof( client->mBuffer ),
				"mail #%d, It's good to see how people hire; "
				"that tells us how to market ourselves to them.\n", client->mSendMsgs );
		}

		int len = send( fd, client->mBuffer, strlen( client->mBuffer ), 0 );

		if( len <= 0 && EAGAIN != errno ) {
			fprintf( stderr, "#%d on_write error, errno %d, %s\n", fd, errno, strerror( errno ) );
			close_client( client );
		} else {
			if( client->mSendMsgs >= gMsgs ) close_write( client );
		}
	} else {
		fprintf( stderr, "#%d on_write timeout\n", fd );
		close_client( client );
	}
}
开发者ID:CCoder123,项目名称:pproj,代码行数:28,代码来源:teststress.cpp


示例6: on_read

/**
* This function will be called by libevent when the client socket is
* ready for reading.
*/
void
on_read(int fd, short ev, void *arg)
{
	struct client *client = (struct client *)arg;
	int len;
	
	len = recv(fd, client->buffer, sizeof( client->buffer ) - 1, 0);
	if (len == 0) {
		printf("Client(%d) disconnected.\n",fd);
		close_client(client, fd);
		return;
	}
	else if (len < 0 && WSAEWOULDBLOCK != WSAGetLastError() ) {
		printf("recv(%d) fail, len %d, errno %d\n", fd, len, WSAGetLastError() );

	}
	
	if( len > 0 ) {
		client->total = len;
		client->wlen = 0;
		if(0 != event_add( &( client->ev_write ), NULL ) ) {
			close_client( client, fd );
		}
	} else {
		if( 0!= event_add( &( client->ev_read ), NULL ) ) {
			close_client( client, fd );
		}
	}
}
开发者ID:JCGit,项目名称:Ggame,代码行数:33,代码来源:echo-iocp.c


示例7: on_buf_read

/**
 * handle outstanding reads on the client socket
 */
static void on_buf_read(struct bufferevent *bev, void *arg) {
    client_t *client = (client_t *)arg;
    size_t buffer_left, bytes_read;
    char *end;

    assert(client);
    assert(client->fd > 0);
    assert(client->request);

    if((!client) || (!client->request) || (client->fd < 1)) {
        ERROR("Bad client struct in on_buf_read");
        close_client(client);
        return;
    }

    DEBUG("Read event (state %d) on fd %d", client->state, client->fd);

    buffer_left = MAX_REQUEST_SIZE - strlen(client->request);

    if(buffer_left <= 0) {
        ERROR("Out of request space on fd %d.  Aborting.", client->fd);
        close_client(client);
    }

    bytes_read = bufferevent_read(client->buf_ev,
                                  (void*)&client->request[strlen(client->request)],
                                  buffer_left - 1);

    if(bytes_read == -1) {
        if (errno != EINTR) {
            /* if EINTR, we'll just pick it back up on the next epoll */
            ERROR("Read error on fd %d", client->fd);
            close_client(client);
        }

        return;
    }


    DEBUG("Read %d bytes on fd %d", bytes_read, client->fd);

    end = client->request;
    while(*end && (*end != '\n') && (*end != '\r')) {
        end++;
    }

    if(*end) {
        *end = '\0';
        client->state = CLIENT_STATE_WAITING_REPLY;
        DEBUG("Got client request on fd %d: %s", client->fd, client->request);

        /* hand this off to set up a response object */
        handle_request(client);
    } else {
        DEBUG("Partial request read on fd %d", client->fd);
    }
}
开发者ID:breu,项目名称:evgopherd,代码行数:60,代码来源:main.c


示例8: _be_ssl_accept

int _be_ssl_accept(se_ptr_t *ptr)
{
    epdata_t *epd = ptr->data;

    if(!epd) {
        return 0;
    }

    if(!epd->ssl) {
        epd->ssl = SSL_new(ssl_ctx);

        if(epd->ssl == NULL) {
            LOGF(ERR, "SSL_new");
            close_client(epd);
            return 0;
        }

        if(SSL_set_fd(epd->ssl, epd->fd) != 1) {
            SSL_free(epd->ssl);
            epd->ssl = NULL;
            LOGF(ERR, "SSL_set_fd");
            close_client(epd);
            return 0;
        }

        if(ssl_epd_idx > -1) {
            if(SSL_set_ex_data(epd->ssl, ssl_epd_idx, epd) != 1) {
                SSL_free(epd->ssl);
                LOGF(ERR, "SSL_set_ex_data");
                int fd = epd->fd;
                free(epd);
                close(fd);
                return 0;
            }
        }
    }

    int ret = SSL_accept(epd->ssl);

    if(ret != 1) {
        int ssl_err = SSL_get_error(epd->ssl, ret);

        if(ssl_err != SSL_ERROR_WANT_READ && ssl_err != SSL_ERROR_WANT_WRITE) {
            close_client(epd);
            return 0;
        }

        return 0;
    }

    se_be_read(epd->se_ptr, network_be_read);
}
开发者ID:hopestar,项目名称:alilua,代码行数:52,代码来源:worker.c


示例9: respond

void respond(struct Client *c)
{
	char *resp = "HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\nCool\r\n\r\n";
	char *resp400 = "HTTP/1.1 400 Bad Request\r\n\r\n";

	if (c->pstate == ERROR) {
		send(c->fd, resp400, strlen(resp400), 0);
		close_client(c->fd);
	} else if (c->pstate == SUCCESS) {
		send(c->fd, resp, strlen(resp), 0);
		close_client(c->fd);
	}
}
开发者ID:eavgerinos,项目名称:rea,代码行数:13,代码来源:rea.c


示例10: remote_recv_cb

static void
remote_recv_cb(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) {
    struct remote_context *remote;
    struct client_context *client;

    remote = stream->data;
    client = remote->client;

    if (nread > 0) {
        reset_timer(remote);
        struct packet *packet = &remote->packet;
        int rc = packet_filter(packet, buf->base, nread);
        if (rc == PACKET_COMPLETED) {
            int clen = packet->size;
            int mlen = packet->size - PRIMITIVE_BYTES;
            uint8_t *c = packet->buf, *m = packet->buf;

            assert(mlen > 0 && mlen <= MAX_PACKET_SIZE - PRIMITIVE_BYTES);

            int err = crypto_decrypt(m, c, clen);
            if (err) {
                goto error;
            }

            uv_read_stop(&remote->handle.stream);
            forward_to_client(client, m, mlen);

        } else if (rc == PACKET_INVALID) {
            goto error;
        }

    } else if (nread < 0){
        if (nread != UV_EOF && verbose) {
            char addrbuf[INET6_ADDRSTRLEN + 1];
            int port = ip_name(&client->target_addr, addrbuf, sizeof(addrbuf));
            logger_log(LOG_ERR, "receive from %s:%d failed: %s", addrbuf, port, uv_strerror(nread));
        }
        close_client(client);
        close_remote(remote);
    }

    return;

error:
    logger_log(LOG_ERR, "invalid tcp packet");
    if (verbose) {
        dump_hex(buf->base, nread, "invalid tcp Packet");
    }
    close_client(client);
    close_remote(remote);
}
开发者ID:jiaoyk,项目名称:xSocks,代码行数:51,代码来源:xTproxy_remote.c


示例11: control_window_proc

//
// Handles the IDA window messages for the hidden control window.
//
static LRESULT CALLBACK control_window_proc(HWND wnd, UINT msg, 
		WPARAM wp, LPARAM lp)
{
	switch (msg)
	{
		case WM_NETEVENT:
			{
				switch (WSAGETSELECTEVENT(lp))
				{
					case FD_ACCEPT:
						accept_client();
						break;
					case FD_READ:
						process_client((SOCKET)wp);
						break;
					case FD_CLOSE:
						close_client((SOCKET)wp);
						break;
				}
			}
			break;
		default:
			return DefWindowProc(wnd, msg, wp, lp);
	}

	return 0;
}
开发者ID:jduck,项目名称:idarub,代码行数:30,代码来源:idarub.cpp


示例12: deactivate_audio

    ~jack_backend(void)
    {
        if (audio_is_active())
            deactivate_audio();

        close_client();
    }
开发者ID:DSastre,项目名称:supercollider,代码行数:7,代码来源:jack_backend.hpp


示例13: timeout_handle

static void timeout_handle(void *ptr)
{
    epdata_t *epd = ptr;

    if(epd->status == STEP_READ) {
        epd->keepalive = 0;
        //LOGF(ERR, "Read Timeout!");
        network_send_error(epd, 400, "Timeout!");
        return;
        //serv_status.reading_counts--;

    } else if(epd->status == STEP_SEND) {
        //LOGF(ERR, "Send Timeout!");
        serv_status.sending_counts--;
    }

    if(epd->status == STEP_PROCESS && epd->L) {
        LOGF(ERR, "Process Timeout(continue)");
        update_timeout(epd->timeout_ptr, STEP_PROCESS_TIMEOUT);
        return;
    }

    epd->status = STEP_WAIT;

    close_client(epd);
}
开发者ID:hopestar,项目名称:alilua,代码行数:26,代码来源:worker.c


示例14: client_accept_cb

void
client_accept_cb(uv_stream_t *server, int status) {
    struct client_context *client = new_client();
    struct remote_context *remote = new_remote(idle_timeout);

    client->remote = remote;
    remote->client = client;

    uv_timer_init(server->loop, remote->timer);

    uv_tcp_init(server->loop, &client->handle.tcp);
    uv_tcp_init(server->loop, &remote->handle.tcp);


    int rc = uv_accept(server, &client->handle.stream);
    if (rc == 0) {
        int namelen = sizeof client->addr;
        uv_tcp_getpeername(&client->handle.tcp, &client->addr, &namelen);
        reset_timer(remote); // start timer
        connect_to_remote(remote);
    } else {
        logger_log(LOG_ERR, "accept error: %s", uv_strerror(rc));
        close_client(client);
        close_remote(remote);
    }
}
开发者ID:road0001,项目名称:xsocks,代码行数:26,代码来源:xsocks_client.c


示例15: client_handler

void client_handler(client_t* client) {
	int ret;

	assert(client->fired_event != NULL);

	// Two stages
	// First, read HTTP request, interested in readable event
	if (client->stage == CS_READ_REQUEST) {
		if (client->fired_event->filter == EVFILT_READ) {
			ret = parse_http_request(client);
			if (ret) goto close;

			ret = generate_http_response(client);
			if (ret) goto close;

			client->stage = CS_WRITE_RESPONSE;
		}
	}
	// Then, write HTTP response, interested in writable event
	else if (client->stage == CS_WRITE_RESPONSE) {
		if (client->fired_event->filter == EVFILT_WRITE) {
			ret = write_http_response(client,
					client->fired_event->data);
			// When it went wrong or just finished correctly,
			// close the client
			if (ret) goto close;
		}
	}

	// Clear the event since it has been handled
	client->fired_event = NULL;
	return;
close:
	close_client(client);
}
开发者ID:tatetian,项目名称:nweb,代码行数:35,代码来源:nweb_kqueue.c


示例16: client_send_cb

static void
client_send_cb(uv_write_t *req, int status) {
    struct client_context *client = req->data;
    struct remote_context *remote = client->remote;

    if (status == 0) {
        if (client->stage == XSTAGE_REQUEST) {
            receive_from_client(client);

        } else if (client->stage == XSTAGE_FORWARD) {
            receive_from_remote(remote);

        } else if (client->stage == XSTAGE_TERMINATE) {
            close_client(client);
            close_remote(remote);
        }

    } else {
        char addrbuf[INET6_ADDRSTRLEN + 1] = {0};
        int port = ip_name(&client->addr, addrbuf, sizeof addrbuf);
        if (client->stage == XSTAGE_FORWARD) {
            logger_log(LOG_ERR, "%s:%d <- %s failed: %s", addrbuf, port, client->target_addr, uv_strerror(status));
        } else {
            logger_log(LOG_ERR, "forward to %s:%d failed: %s", addrbuf, port, uv_strerror(status));
        }
    }

    free(req);
}
开发者ID:road0001,项目名称:xsocks,代码行数:29,代码来源:xsocks_client.c


示例17: close_bev

static void close_bev(struct bufferevent *bev, struct conn_desc *conn)
{
    if (IS_SERVER(bev, conn))
	close_server(conn);
    else
	close_client(conn);
}
开发者ID:Nothing4You,项目名称:nntp-proxy,代码行数:7,代码来源:nntp-proxy.c


示例18: eventLoop

void eventLoop( HANDLE hIocp )
{
	DWORD bytesTransferred = 0;
	SP_TestClient * client = NULL;
	SP_TestEvent * event = NULL;

	BOOL isSuccess = GetQueuedCompletionStatus( hIocp, &bytesTransferred,
			(DWORD*)&client, (OVERLAPPED**)&event, 100 );
	DWORD lastError = WSAGetLastError();

	if( ! isSuccess ) {
		if( NULL != client ) {
			gStat.mGQCSFail++;
			close_client( client );
		}
		return;
	}

	if( SP_TestEvent::eEventRecv == event->mType ) {
		on_read( client, event );
		return;
	}

	if( SP_TestEvent::eEventSend == event->mType ) {
		on_write( client, event );
		return;
	}
}
开发者ID:CCoder123,项目名称:pproj,代码行数:28,代码来源:testiocpstress.cpp


示例19: main

int main(int argc, char * argv[]) {
  init_client();
  start_transaction();
  close_client();
  fprintf(stderr, "closed.....\n");
  return 0;
}
开发者ID:sheimi,项目名称:ipc-homework,代码行数:7,代码来源:client.c


示例20: on_buf_write

/**
 * Set to a zero watermark, so gets called when all data for this
 * socket is written out.  In this case, we're done.
 */
static void on_buf_write(struct bufferevent *bev, void *arg) {
    /* we finished our write.  We done. */
    client_t *client = (client_t *)arg;

    DEBUG("Finished write on fd %d", client->fd);
    close_client(client);
}
开发者ID:breu,项目名称:evgopherd,代码行数:11,代码来源:main.c



注:本文中的close_client函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ close_conn函数代码示例发布时间:2022-05-30
下一篇:
C++ close_and_free_server函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap