📄 pg_net.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 + -