示例#1
0
文件: cs_server.c 项目: heltstar/cs
int cs_routine(int fd, sqlite3 *db)
{
    sockfd_buf_t *rwbuf = sockfd_list[fd];

    if (rwbuf == NULL)
        return -1;
    if (rwbuf->rbuf.data == NULL)
        return -1;
    if (rwbuf->wbuf.data == NULL)
        return -1;

    int n = read(fd, rwbuf->rbuf.data, rwbuf->rbuf.max);
    if (n < 0) {
        E("%s", strerror(errno));
        return -1;
    } else if (n == 0) {
        sockfd_buf_free(rwbuf);
        sockfd_list[fd] = NULL;

        unregister_readfd(fd);
        unregister_writefd(fd);
        unregister_exceptfd(fd);

        D(GREEN"client %d is closed."NO, fd);
        close(fd);
        return 0;
    }

    D(GREEN"receive %s %d bytes from %d."NO, 
      rwbuf->rbuf.data, n, fd);
    rwbuf->rbuf.len = n;

    n = sql_routine(fd, db, rwbuf);
    if (n == -1) {
        E("sql_routine() failed.");
        return -1;
    }

    D(GREEN"send %s %d bytes to %d."NO, 
      rwbuf->wbuf.data, rwbuf->wbuf.len, fd);

    n = write(fd, rwbuf->wbuf.data, rwbuf->wbuf.len);
    if (n == -1) {
        E("%s", strerror(errno));
        return -1;
    }

    memset(rwbuf->wbuf.data, 0, rwbuf->wbuf.max);
    rwbuf->wbuf.len = 0;
    memset(rwbuf->rbuf.data, 0, rwbuf->rbuf.max);
    rwbuf->rbuf.len = 0;

    return 0;
}
示例#2
0
/**
 * @fn void deinit_ss7OmMIB(void)
 * @brief deinitialization routine.
 *
 * This is called before the agent is unloaded.  At a minimum, deregistration of the MIB variables
 * structure (ss7OmMIB_variables) should take place here.  By default, the function also
 * deregisters the the configuration file handlers for the MIB variables and table rows.
 *
 * Additional deregistrations that may be required here are calls to unregister_readfd(),
 * unregister_writefd() and unregsiter_exceptfd() for unhooking from the snmpd event loop, but only
 * when used as a loadable module.  By default if a read file descriptor exists, it is unregistered.
 */
void
deinit_ss7OmMIB(void)
{
	DEBUGMSGTL(("ss7OmMIB", "deinit_ss7OmMIB: deinitializating...  "));
	external_signal_handler[SIGCHLD] = ss7OmMIBold_signal_handler;
	if (my_readfd >= 0) {
		unregister_exceptfd(my_readfd);
		unregister_readfd(my_readfd);
		close(my_readfd);
		my_readfd = -1;
	}
	unregister_mib(ss7OmMIB_variables_oid, sizeof(ss7OmMIB_variables_oid) / sizeof(oid));
	snmpd_unregister_config_handler("ss7OmMIB");
	/* place any other de-initialization junk you need here */
	DEBUGMSGTL(("ss7OmMIB", "done.\n"));
}
示例#3
0
文件: cs_server.c 项目: jesse2013/cs
int cs_routine(int fd, sqlite3 *db)
{
    sockfd_buf_t *rwbuf = sockfd_list[fd];

    if (rwbuf == NULL)
        return -1;
    if (rwbuf->rbuf.data == NULL)
        return -1;
    if (rwbuf->wbuf.data == NULL)
        return -1;

    int n = read(fd, rwbuf->rbuf.data, rwbuf->rbuf.max);
    if (n < 0) {
        E("%s", strerror(errno));
        return -1;
    } else if (n == 0) {
        sockfd_buf_free(rwbuf);
        sockfd_list[fd] = NULL;

        unregister_readfd(fd);
        unregister_writefd(fd);
        unregister_exceptfd(fd);

        close(fd);
        D(GREEN"close %d client success."NO, fd);
        return 0;
    }

    D(GREEN"receive %s %d bytes from %d."NO, 
      rwbuf->rbuf.data, n, fd);
    rwbuf->rbuf.len = n;

    DDBUF(rwbuf->rbuf);
    rwbuf->rbuf.len -= 4;
    strncpy(rwbuf->rbuf.data, rwbuf->rbuf.data + 4, rwbuf->rbuf.len);
    DDSTR(rwbuf->rbuf);

    n = sql_routine(fd, db, rwbuf);
    if (n == -1) {
        E("sql_routine() failed.");
        
        if (rwbuf->wbuf.len == 0) {
            strncpy(rwbuf->wbuf.data, "err", 3);
            rwbuf->wbuf.len = 3;
        }
        //return -1;
    }

    D(GREEN"send %s %d bytes to %d."NO, 
      rwbuf->wbuf.data, rwbuf->wbuf.len, fd);

    //rwbuf->wbuf.data[0] = '\0';
    //rwbuf->wbuf.data[1] = '\0';
    //rwbuf->wbuf.data[2] = '\0';
    //rwbuf->wbuf.data[3] = 8;
    //DDBUF(rwbuf->wbuf);

    n = write(fd, rwbuf->wbuf.data, rwbuf->wbuf.len);
    if (n == -1) {
        E("%s", strerror(errno));
        return -1;
    }

    memset(rwbuf->wbuf.data, 0, rwbuf->wbuf.max);
    rwbuf->wbuf.len = 0;
    memset(rwbuf->rbuf.data, 0, rwbuf->rbuf.max);
    rwbuf->rbuf.len = 0;

    return 0;
}