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; }
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; }
/* 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(); }