Example #1
0
int main(void)
{
	hExitEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
	clients = (int*)malloc(sizeof(int)*MAX_CLIENTS);
	ss = socket_server_create(socket_callback);


	HANDLE h = (HANDLE)_beginthreadex(NULL, 0, test, 0, 0, NULL);

	WaitForSingleObject(h, INFINITE);
	int i;
	for (i=0; i<MAX_CLIENTS; ++i)
	{
		socket_server_close(ss, 100+i, clients[i]);
	}

	socket_server_exit(ss);
	socket_server_wait_for_exit(ss);
	socket_server_release(ss);

	printf("test end\n");
	printf("expected bytes: %d send bytes: %d recv bytes: %d\n", EXPECTED_BYTES, sent_bytes, recv_bytes);
	free(clients);
	system("pause");
	return 0;
}
Example #2
0
/*
  main program
*/
int main(int argc, const char *argv[])
{
	struct poptOption popt_options[] = {
		POPT_AUTOHELP
		{ "socket", 0, POPT_ARG_STRING, &globals.socketname, 0, "local socket name", "filename" },
		POPT_TABLEEND
	};
	int opt;
	const char **extra_argv;
	int extra_argc = 0;
	poptContext pc;

	DEBUGLEVEL = DEBUG_INFO;

	pc = poptGetContext(argv[0], argc, argv, popt_options, POPT_CONTEXT_KEEP_FIRST);

	while ((opt = poptGetNextOpt(pc)) != -1) {
		switch (opt) {
		default:
			fprintf(stderr, "Invalid option %s: %s\n",
				poptBadOption(pc, 0), poptStrerror(opt));
			exit(1);
		}
	}

	/* setup the remaining options for the main program to use */
	extra_argv = poptGetArgs(pc);
	if (extra_argv) {
		extra_argv++;
		while (extra_argv[extra_argc]) extra_argc++;
	}

	if (globals.socketname == NULL) {
		DEBUG(DEBUG_CRIT,("Socket name is undefined\n"));
		exit(1);
	}
	if (socket_server_create()) {
		DEBUG(DEBUG_CRIT,("Socket error: exiting\n"));
		exit(1);
	}
	if (fork_helper()) {
		DEBUG(DEBUG_CRIT,("Forking error: exiting\n"));
		exit(1);
	}
	/* FIXME: Test tcp_checksum6, tcp_checksum */
	/* FIXME: Test ctdb_sys_send_arp, ctdb_sys_send_tcp */
	/* FIXME: Test ctdb_sys_{open,close}_capture_socket, ctdb_sys_read_tcp_packet */
	test_ctdb_sys_check_iface_exists();
	test_ctdb_get_peer_pid();

	socket_server_close();

	DEBUG(DEBUG_INFO,("%d/%d tests successfull\n", globals.successcount, globals.testcount));
	return 0;
}
Example #3
0
int main() {
	struct sigaction sa;
	sa.sa_handler = SIG_IGN;
	sigaction(SIGPIPE, &sa, 0);

	struct socket_server * ss = socket_server_create();
	test(ss);
	socket_server_release(ss);

	return 0;
}
Example #4
0
int main(void)
{
	clients = (int*)malloc(sizeof(int)*MAX_CLIENTS);
	ss = socket_server_create(socket_callback);


	HANDLE h = (HANDLE)_beginthreadex(NULL, 0, test, 0, 0, NULL);

	WaitForSingleObject(h, INFINITE);
	int i;
	for (i=0; i<MAX_CLIENTS; ++i)
	{
		socket_server_close(ss, 100+i, clients[i]);
	}

	socket_server_exit(ss);
	socket_server_wait_for_exit(ss);
	socket_server_release(ss);

	printf("test end\n");
	free(clients);
	system("pause");
	return 0;
}
Example #5
0
void 
skynet_socket_init() {
	SOCKET_SERVER = socket_server_create();
}
Example #6
0
int
main(int argc, char *argv[])
{
	if (argc != 4)
	{
		printf("Copyright (c) 2014, Dali Wang<*****@*****.**>.\n");
		printf("Used: sms ip port serial\n");
		printf("./sms 127.0.0.1 8888 /dev/ttyS0");
		return 0;
	}
  
	sigign(); // 信号处理
	
  
	// 注册返回函数
	settings.on_message_begin = begin_cb;
	settings.on_url = url_cb;
	settings.on_header_field = field_cb;
	settings.on_header_value = value_cb;
	settings.on_headers_complete = herders_cb;
	settings.on_body = body_cb;
	settings.on_message_complete = end_cb;
	settings.on_status = status_cb;

	cssl_start(); // 开启CSSL库

	//"/dev/ttyS1"
	serial = cssl_open(argv[3], callback, 0, 9600, 8, 0, 1); // 打开串口

	// 打开失败
	if (!serial)
	{
		printf("Open COM Fail = %s\n", cssl_geterrormsg()); // 获得错误信息
		return -1;
	}

	ss = socket_server_create(); // 创建 socket_server
	int listen_id = socket_server_listen(ss, 100, argv[1], atoi(argv[2]), 32); // 监听 socket
	socket_server_start(ss, 200, listen_id); // 纳入事件管理

	struct socket_message result; // 声明一个soket消息的结构
	for (;;)
	{
		int type = socket_server_poll(ss, &result, NULL); // 事件循环

		switch (type)
		{
			case SOCKET_EXIT:
				printf("exit(%lu) [id=%d]\n", result.opaque, result.id);
				goto EXIT_LOOP;
			case SOCKET_DATA:
				//printf("data(%lu) [id=%d] %s\n", result.opaque, result.id, result.data);
				OnReceive(result); // 收到数据,调用函数处理
				break;
			case SOCKET_CLOSE:
				printf("close(%lu) [id=%d]\n", result.opaque, result.id);
				free((void*)result.opaque);
				break;
			case SOCKET_OPEN:
				printf("open(%lu) [id=%d] %s\n", result.opaque, result.id, result.data);
				break;
			case SOCKET_ERROR:
				printf("error(%lu) [id=%d]\n", result.opaque, result.id);
				break;
			case SOCKET_ACCEPT:
			{
				printf("accept(%lu) [id=%d %s] from [%d]\n", result.opaque, result.ud, result.data, result.id);

				// 初始化 HTTP 结构
				struct http_parser *parser;
				parser = (http_parser *) malloc(sizeof(http_parser));
				http_parser_init(parser, HTTP_REQUEST);

				socket_server_start(ss, (uintptr_t)parser, result.ud); // 纳入事件管理

				id = result.ud; // 临时解决办法,应该使用 parser->data来传输 。
			}
				break;
		} // switch
	} // for
	EXIT_LOOP: socket_server_release(ss); // 关闭 socket_server
	return 0;
}