Esempio n. 1
0
static void connect_callback(struct ev_loop *loop,struct ev_io *w ,int revents)
{
    struct sc_tcp_server *self = container_of(w,struct sc_tcp_server, connect);

    printf("in connect_callback:%s,%d\n", __FILE__, __LINE__);
    const struct sc_tcp_server_settings *settings = self->settings;
    assert(!(revents & EV_ERROR));

    if (revents & EV_READ) {
        struct sockaddr_storage addr;
        socklen_t addrlen = sizeof(addr);
        int fd;
        fd= sc_accept(w->fd, (struct sockaddr *)&addr, &addrlen);
        if (fd < 0)
            return;
              
        init_accept_fd(self, loop, fd);
/*
        if (fd < 0) {
            settings->on_error(self,loop,SC_TCP_SERVER_ACCEPT_ERROR);
        } else if (!settings->on_connect( self, loop, fd, 
                                        (struct sockaddr*)&addr, addrlen))
        sc_close(&fd);
*/
    }
}
Esempio n. 2
0
int main(int argc, char *argv[])
{
    SC_Connection server;
    SC_Connection peer;

    if (argc < 2)
    {
        fprintf(stderr,"Usage:\n\t%s <port>\n",argv[0]);
        exit(EXIT_FAILURE);
    }

    if(init_sc_server(&server,argv[1]) != SC_OK)
    {
        fprintf(stderr,"server: couldn't initiate server\n");
        exit(EXIT_FAILURE);
    }

    if(sc_listen(&server) != SC_OK)
    {
        exit(EXIT_FAILURE);
    }

    printf("server: waiting for connections...\n");

    while(1)
    {
        if(sc_accept(&server,&peer) != SC_OK)
        {
            perror("accept");
            continue;
        }


        if(send(peer.socket, "Hello, world!", 13, 0) == -1)
        {
            perror("send");
        }

        close(peer.socket);
    }

    close(server.socket);

    return 0;
}
Esempio n. 3
0
static int __sc_accept(struct task_struct *curr, struct pt_regs *regs)
{
	char **mboxp, *msg;
	int err;

	/* We should be able to write to a mailbox storage, even if we
	 * actually don't. */
	if (!__xn_access_ok
	    (curr, VERIFY_WRITE, __xn_reg_arg1(regs), sizeof(msg)))
		return -EFAULT;

	if (!__xn_access_ok
	    (curr, VERIFY_WRITE, __xn_reg_arg2(regs), sizeof(msg)))
		return -EFAULT;

	mboxp = (char **)__xn_reg_arg1(regs);
	msg = sc_accept(mboxp, &err);

	if (!err)
		__xn_copy_to_user(curr, (void __user *)__xn_reg_arg2(regs),
				  &msg, sizeof(msg));
	return err;
}