⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pg_net.cpp

📁 实现pg接口功能
💻 CPP
字号:
#ifdef HP_UX#define __cplusplus  199708L   //add for hp#endif#include <stdio.h>#include <stdlib.h>#include <time.h>#include <unistd.h>#include <errno.h>#include <strings.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <inttypes.h>#include <pthread.h>#include "pg_net.h"#include "pg_main.h"extern PGSERVER_CONFIG	server_config_info;extern DB_Proc	DB_proc;extern CRw_net	Rw_net;/**************************************************************** * PG接口网络传输程序实现					 * Language:		C++					 * OS Platform:   	UNIX						 * Authors:							 * Date:						 * Copyight (C)  	 ****************************************************************/CRw_net::CRw_net(){	return;}CRw_net::~CRw_net(){}int	CRw_net::listen_start(int *listenfd,int serv_port){	struct sockaddr_in  servaddr;	const int	val=1;	*listenfd = socket(AF_INET, SOCK_STREAM, 0);    if(*listenfd < 0)    {    	printf("Socket error \n");    	return -1;    }        bzero(&servaddr, sizeof(servaddr));    servaddr.sin_family = AF_INET;    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);    servaddr.sin_port = htons(serv_port);    	setsockopt(*listenfd,SOL_SOCKET,SO_REUSEADDR,(void *)&val,sizeof(val));    if(bind(*listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)    {    	printf("Bind error \n");    	return -1;    }    if(listen(*listenfd, BACKLOG) < 0)    {    	printf("Listen error \n");    	return -1;    }	printf("NOW listen on port %d\n",serv_port);	return 0;}int CRw_net::set_sockfd(int port,char *ip){	int sockfd;	struct  sockaddr_in	servaddr;		const int val=1;		printf("port = %d\tip = %shello\n",port,ip);	if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0)	{		printf("get connect sockfd failed!\n");		return -1;	}	setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(void *)&val,sizeof(val));	bzero(&servaddr,sizeof(servaddr));	servaddr.sin_family = AF_INET;	servaddr.sin_port = htons(port);	servaddr.sin_addr.s_addr = inet_addr(ip);	if (connect(sockfd,(struct  sockaddr *)&servaddr,sizeof(servaddr)) < 0)	{		printf("connect sockfd to server failed!\n");		return -1;	}	return sockfd;}/*发送指定长度的报文*/int CRw_net::write_all(int fd, void *buf, int n){    int  nleft, nbytes;    int  len, ret;    char *p1;    char *ptr;        len = n;    p1 = (char *)malloc(len);    memcpy(p1, buf, len);            nleft = len;    ptr = p1;    for(; nleft > 0; )    {    	nbytes = write(fd, ptr, nleft);    	if(nbytes <= 0)    	{    	    if(errno == EINTR)    	    	nbytes = 0;    	    else    	    {    	    	free(p1);    	    	return(-1);    	    }    	}    	nleft = nleft - nbytes;    	ptr = ptr + nbytes;    }    free(p1);    return(n);}/*接收指定长度的报文*/int CRw_net::read_all(int fd, void *buf, int n){    int nleft, nbytes;    int len;    char *p1, *p2;        len = n;    p1 = (char *)malloc(len);    p2 = p1;    nleft = len;    for(; nleft > 0; )    {    	nbytes = read(fd, p2, nleft);    	if (nbytes < 0)    	{    	    if(errno == EINTR)    	    	nbytes = 0;    	    else    	    {    	    	free(p1);    	    	return(-1);    	    }    	}    	else    	    if(nbytes == 0)    	    	break;    	    	nleft = nleft - nbytes;    	p2 = p2 + nbytes;    }        memcpy(buf, p1, n - nleft);    free(p1);    return(n - nleft);    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -