Esempio n. 1
0
static int
kclient_connect(int descidx)
{
	int ret;
	struct sock *sk;
	kclient_desc_t *desc = *(kclient_desc + descidx / KCLIENT_NCONNECTS)
					      + descidx % KCLIENT_NCONNECTS;

	ret = ss_sock_create(kclient_server_address.sa.sa_family,
			     SOCK_STREAM, IPPROTO_TCP, &sk);
	if (ret) {
		SS_DBG("Unable to create kernel socket (%d)\n", ret);
		desc->flags |= KCLIENT_CONNECT_ERROR;
		atomic_inc(&kclient_connect_nerror);
		return ret;
	}
	ss_proto_init(&desc->proto, &kclient_hooks, descidx);
	rcu_assign_sk_user_data(sk, &desc->proto);
	ss_set_callbacks(sk);
	ret = ss_connect(sk, &kclient_server_address.sa,
			 tfw_addr_sa_len(&kclient_server_address), 0);
	if (ret) {
		SS_DBG("Connect error on server socket sk %p (%d)\n", sk, ret);
		ss_release(sk);
		desc->flags |= KCLIENT_CONNECT_ERROR;
		atomic_inc(&kclient_connect_nerror);
		return ret;
        }
	desc->sk = sk;
	desc->flags |= KCLIENT_CONNECT_STARTED;
	atomic_inc(&kclient_connect_nattempt);
	return 0;
}
Esempio n. 2
0
static int
tfw_bmb_connect(int tn, int cn)
{
	int ret;
	struct sock *sk;
	TfwBmbConn *conn;

	conn = &bmb_task[tn].conn[cn];

	ret = ss_sock_create(bmb_server_address.sa.sa_family, SOCK_STREAM,
			     IPPROTO_TCP, &sk);
	if (ret) {
		TFW_ERR("Unable to create kernel socket (%d)\n", ret);
		return ret;
	}

	ss_proto_init(&conn->proto, &bmb_hooks, tn * nconns + cn);
	rcu_assign_sk_user_data(sk, &conn->proto);
	ss_set_callbacks(sk);

	ret = ss_connect(sk, &bmb_server_address.sa,
			 tfw_addr_sa_len(&bmb_server_address), 0);
	if (ret) {
		TFW_ERR("Connect error on server socket sk %p (%d)\n", sk, ret);
		tfw_connection_unlink_from_sk(sk);
		ss_close(sk);
		return ret;
        }

	conn->sk = sk;
	bmb_task[tn].conn_attempt++;

	return 0;
}
Esempio n. 3
0
File: sum.c Progetto: mingpen/OpenNT
/* program entry point
 *
 * creates the named pipe, and loops waiting for client connections and
 * calling ss_handleclient for each connection. only exits when told
 * to by a client.
 *
 * currently permits only one client connection at once.
 */
int PASCAL
WinMain (HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmdParam,
 		int nCmdShow)
{
	HANDLE hpipe;
	SSRESPONSE resp;
	PSTR tag;

	/* we expect two args: the server name, and the pathname */

	if (__argc != 3) {

		printf("usage: client <servername> <pathname>");
		return(1);
	}

 	hpipe = ss_connect(__argv[1]);
	if (hpipe == INVALID_HANDLE_VALUE) {
		printf("cannot connect to server %s\n", __argv[1]);
		return(2);
	}

	/* make a packet to send */
	if (!ss_sendrequest(hpipe, SSREQ_SCAN, __argv[2], strlen(__argv[2])+1)) {
		printf("pipe write error %d\n", GetLastError());
		return(3);
	}


	/* loop reading responses */
	for (; ;) {
		
		if (!ss_getresponse(hpipe, &resp)) {
			printf("pipe read error %d\n", GetLastError());
			return(4);
		}
		

		if (resp.lCode == SSRESP_END) {
			printf("-----------------end of list");
			break;
		}
		
		switch(resp.lCode) {
		case SSRESP_ERROR:
			tag = "ERROR";	
			printf("%s\t\t\t%s\n", tag, resp.szFile);
			break;

		case SSRESP_DIR:
			tag = "dir";	
			printf("%s\t\t\t%s\n", tag, resp.szFile);
			break;

		case SSRESP_FILE:
			tag = "file";
			printf("%s\t%08lx\t%d bytes\t%s\n", tag, resp.ulSum, resp.ulSize, resp.szFile);
			break;
		}
	}
	ss_terminate(hpipe);
	return(0);

}
void el_init(int port, char* host) {
	el_sockfd = ss_connect(host, port);
	eventHandlers.handlerCount = 0;
	el_startEventListen();
}