Exemplo n.º 1
0
static int
shutdown_socket(DBPROCESS *dbproc)
{
	union {
		struct sockaddr sa;
		char data[256];
	} u;
	SOCKLEN_T addrlen;
	struct stat file_stat;
	TDS_SYS_SOCKET sockets[2];

	TDS_SYS_SOCKET socket = DBIOWDESC(dbproc);

	if (fstat(socket, &file_stat))
		return 0;
	if ((file_stat.st_mode & S_IFSOCK) != S_IFSOCK)
		return 0;

	addrlen = sizeof(u);
	if (tds_getsockname(socket, &u.sa, &addrlen) < 0 || (u.sa.sa_family != AF_INET && u.sa.sa_family != AF_INET6))
		return 0;

	/* replace socket with a new one */
	if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockets) < 0)
		return 0;

	/* substitute socket */
	close(socket);
	dup2(sockets[0], socket);

	/* close connection */
	close(sockets[0]);
	end_socket = sockets[1];
	return 1;
}
Exemplo n.º 2
0
bool CDBL_Connection::Abort()
{
    int fdr= DBIORDESC(GetDBLibConnection());
    int fdw= DBIOWDESC(GetDBLibConnection());
    if(fdr >= 0) {
        close(fdr);
    }
    if(fdw != fdr && fdw >= 0) {
        close(fdw);
    }

    if (fdr >= 0 || fdw >= 0) {
        MarkClosed();
        return true;
    }

    return false;
}