亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? util_tcp.c

?? 使用python調(diào)用tuxedo服務(wù)的代碼, 中間以 c 調(diào)用tuxedo客戶端的atmi接口來作為連接代理
?? C
字號:
#ifdef __WIN32__#include <windows.h>#include <winsock.h>#else#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>#include <sys/wait.h>#include <fcntl.h>#include <sys/poll.h>#endif /*__WIN32__*/#include <stdio.h>#include <errno.h>#include "util_tcp.h"#ifndef POLLWRNORM#define POLLWRNORM 0x100#define POLLRDNORM 0x040#endifconst char * tcp_name2ip (const char *server_name){  struct hostent *ht;  ht = gethostbyname (server_name);  if (ht > 0)    {      return (char *) inet_ntoa (*((struct in_addr *) ht->h_addr_list));    }  return server_name;}int tcp_close (int sd){#ifdef __WIN32__  return closesocket (sd);#else  return close (sd);#endif}#ifdef __WIN32__int WSA_init = 0;int tcp_socket (){    if (WSA_init == 0)    {        WSADATA wdata;        WSAStartup (MAKEWORD (1, 1), &wdata);        WSA_init = 1;    }    return socket (AF_INET, SOCK_STREAM, 0);}#elseint tcp_socket(){    return socket (AF_INET, SOCK_STREAM, 0);}#endif/*接收連接*/int tcp_accept (int sd, char *ip, int *port){  int csd;  struct sockaddr_in addr;  unsigned int addrlen;  memset (&addr, 0, sizeof (addr));  addrlen = sizeof (addr);  csd = accept (sd, (struct sockaddr *) &addr, &addrlen);  if (csd > 0)    {      strcpy (ip, (char *) inet_ntoa (addr.sin_addr));      *port = ntohs (addr.sin_port);    }  return csd;}/* * 綁定本地端口 */int tcp_bind (const char *local_ip, int port){  struct sockaddr_in servaddr;  int opt;  int sd;  sd = tcp_socket ();  if (sd <= 0)    {      return -1;    }  opt = 1;  setsockopt (sd, SOL_SOCKET, SO_REUSEADDR, (char *) &opt, sizeof (opt));  memset (&servaddr, 0, sizeof (servaddr));  servaddr.sin_family = AF_INET;  servaddr.sin_port = htons (port);  servaddr.sin_addr.s_addr =    (local_ip == NULL) ? INADDR_ANY : inet_addr (local_ip);  if (bind (sd, (struct sockaddr *) &servaddr, sizeof (servaddr)) < 0)    {      tcp_close (sd);      return -2;    }  return sd;}int tcp_readline(int sockid, char* command_buf, const int BUFLEN){	int i, length;    length = -1;	for(i = 0; i < BUFLEN; ++i)	{		if(recv(sockid, command_buf + i, 1, 0) < 1){            if(i == 0)                return -1;            break;        }		if(i > 0 && command_buf[i - 1] == '\r' && command_buf[i] == '\n')		{			/* Remove the CRLF. */			command_buf[i - 1] = 0;			break;		}        if(i > 0 && command_buf[i] == '\n'){			command_buf[i] = 0;			break;        }	}	/* If we read MAXLEN characters but never got a CRLF then	// eat all the characters until we get a CRLF. */	if(i == BUFLEN)	{		char cur = command_buf[BUFLEN - 1];		char last = 0;				while(last != '\r' || cur != '\n')		{			last = cur;			if(recv(sockid, &cur, 1, 0) < 1)                break;		}		command_buf[BUFLEN - 1] = 0;	}	if(i < BUFLEN && i > 0)		length = (unsigned int)i - 1;	return length;}int tcp_writeline(int sockid, char *buf){    int i, r;    i = strlen(buf);    r = tcp_writen(sockid, buf, i);    if(r != i)        return -1;    r = tcp_writen(sockid, "\r\n", 2);    if(r != 2)        return -2;    return i+2;}/*綁定本地端口并 進入 listen 狀態(tài)*/int tcp_listen (const char *local_ip, int port){  int sd;  sd = tcp_bind (local_ip, port);  if (sd <= 0)    return sd;  if (listen (sd, 50) < 0)    {      tcp_close (sd);      return -3;    }  return sd;}int tcp_connect (const char *server_name, int port){  struct sockaddr_in servaddr;  int sd = 0, ret;  struct hostent *ht;  sd = tcp_socket ();  if (sd <= 0)    {      return 0;    }  ht = gethostbyname (server_name);  if (ht == NULL)    {      return 0;    }  memset (&servaddr, 0, sizeof (servaddr));  servaddr.sin_family = AF_INET;  servaddr.sin_port = htons (port);  /*servaddr.sin_addr.s_addr = inet_addr(tcp_name2ip(server_name)); */  servaddr.sin_addr.s_addr = ((struct in_addr *) ht->h_addr_list[0])->s_addr;  ret = connect (sd, (struct sockaddr *) &servaddr, sizeof (servaddr));  if (ret != 0)    {      tcp_close (sd);      return 0;    }  return sd;}#ifndef __WIN32__int tcp_connecta (const char *server_name, int port, int timeout){        struct sockaddr_in servaddr;        int addrlen;        int sd = 0, ret;        struct hostent *ht;        const  int  fdcount = 1;        struct pollfd pl[fdcount];        sd = socket(AF_INET, SOCK_STREAM, 0);        if(sd <= 0) {                return 0;        }        pl[0].fd = sd;        pl[0].events = POLLWRNORM | POLLRDNORM;        pl[0].revents = 0;        fcntl(sd, F_SETFL, O_NONBLOCK);        ht = gethostbyname(server_name);        if(ht == NULL){                return 0;        }        memset(&servaddr, 0, sizeof(servaddr));        servaddr.sin_family = AF_INET;        servaddr.sin_port   = htons(port);        /*servaddr.sin_addr.s_addr = inet_addr(tcp_name2ip(server_name));*/        servaddr.sin_addr.s_addr = ((struct in_addr *)ht->h_addr_list[0])->s_addr;        errno = 0;        ret = connect(sd, (struct sockaddr *)&servaddr, sizeof(servaddr));        if(ret == -1 && errno == EINPROGRESS){                poll(pl, fdcount, timeout);                if ( pl[0].revents != POLLWRNORM && pl[0].revents != POLLRDNORM){                        printf("timeout\n");                        close(sd);                        return 0;                }        }else if (ret != 0) {                close(sd);        return 0;    }    return sd;}#endif /* __WIN32__ */int tcp_read (int sockid, char *buf, int len){  return recv (sockid, buf, len, 0);}int tcp_reada (int sockid, char *buf, int len, int timeout){	int ret;	ret = tcp_check_read(&sockid, 1, timeout);	if(ret <= 0)			return ret;  return recv (sockid, buf, len, 0);}int tcp_write (int sockid, char *buf, int len){  return send (sockid, buf, len, 0);}/* 從 fd 讀取固定長度字節(jié), 返回實際讀取的字節(jié)數(shù) */int tcp_readn (int fd, char *ptr, size_t n){  int nleft;  int nread;  char *pp;  pp = ptr;  nleft = n;  while (nleft > 0)    {      if ((nread = tcp_read (fd, ptr, nleft)) <= 0)	{	  printf ("Err nread = %d\n", nread);	  return -1;	}      else if (nread <= 0)	break;      nleft -= nread;      ptr += nread;    }  return (n - nleft);}/* 從 fd 讀取固定長度字節(jié), 返回實際讀取的字節(jié)數(shù), 超時 timeout 毫秒 */int tcp_readna (int fd, char *ptr, size_t n, int timeout){  int nleft;  int nread;  char *pp;  pp = ptr;  nleft = n;  while (nleft > 0)    {      if ((nread = tcp_reada (fd, ptr, nleft, timeout)) <= 0)	{	  printf ("Err nread = %d\n", nread);	  return -1;	}      else if (nread <= 0)	break;      nleft -= nread;      ptr += nread;    }  return (n - nleft);}/* 向 fd 寫入固定長度的字節(jié), 返回實際寫入的字節(jié)數(shù) */int tcp_writen (int fd, char *ptr, int nbytes){  int nleft, nwritten;  char *pp;  nleft = nbytes;  pp = ptr;  while (nleft > 0)    {      nwritten = tcp_write (fd, ptr, nleft);      if (nwritten <= 0)	return (nwritten);      nleft -= nwritten;      ptr += nwritten;    }  return (nbytes - nleft);}/** * 檢查多個sock狀態(tài)是否可讀, 返回設(shè)置的狀態(tài)數(shù)量,  * @socks: array of socket handle * @count: in, count of sockets handle * @timeout: max wait time, in 1/1000 seconds */int tcp_check_read (int *socks, int count, int timeout){  fd_set rfd;  int i, ret, fds, j;  struct timeval tvl;  fds = 0;  FD_ZERO (&rfd);  for (i = 0; i < count; i++)    {      FD_SET (socks[i], &rfd);      fds = (socks[i] > fds) ? socks[i] : fds;    }  fds++;  tvl.tv_sec = timeout / 1000;  tvl.tv_usec = (timeout % 1000) * 1000;  ret = select (fds, &rfd, NULL, NULL, &tvl);  if (ret <= 0)    {      return ret;    }  j = 0;  for (i = 0; i < count; i++)    {      if (FD_ISSET (socks[i], &rfd))	{	  socks[j++] = socks[i];	}    }  return ret;}void check_pid (int pid, int clear){  const int pidcount = 200;	/*最大允許連接數(shù) */  static int cpid[200], init = 0;  int i, ret;  int flag = 0;  if (init == 0)    {      memset (cpid, 0, sizeof (cpid));      init = 1;    }  ret = clear;  if (ret == 1)    {      for (i = 0; i < pidcount; i++)	{	  if (cpid[i] == pid)	    {	      cpid[i] = 0;	      break;	    }	}      return;    }  while (flag == 0)    {      for (i = 0; i < pidcount; i++)	{	  if (cpid[i] == 0)	    {	      if (flag == 0)		{		  cpid[i] = pid;		  flag = 1;		}	      continue;	    }#ifndef __WIN32__	  ret = waitpid (cpid[i], NULL, WNOHANG);	  if ((ret == cpid[i]) || (ret == -1 && errno == 10))	    {	      cpid[i] = 0;	    }#endif	}      if (flag == 0)	{			/*已經(jīng)達到最大數(shù)量, 休息一下, 等待釋放 */#ifndef __WIN32__	  sleep (5);#else	  Sleep (5000L);#endif	}    }}#ifdef __WIN32__struct ccc{  tcp_call_back cb;  int sockid;  int servsockid;  char clientip[25];  int clientport;  void *parm;};#ifdef GCC_pascal DWORD#elseunsigned long WINAPI#endifthread_procs (void *lParm){  struct ccc *cs;  int pid;  cs = (struct ccc *) lParm;  if (cs->cb != NULL)    cs->cb (cs->sockid, cs->clientip, cs->clientport, cs->parm,	    cs->servsockid);  tcp_close (cs->sockid);  pid = GetCurrentThreadId ();  check_pid (pid, 1);  return 0;}#endifvoid tcp_server_loop_multi (int *sockid, int count, tcp_call_back cb, void *parm){  char clientip[25];  int port, psd, pid;  int fds[30], chld_flag;#ifdef __WIN32__  struct ccc cs;#endif  int i, j, ret;  chld_flag = 0;  while (1)    {      for (i = 0, j = 0; i < count; i++)	{	  if (sockid[i] > 0)	    {	      fds[j++] = sockid[i];	    }	}      ret = tcp_check_read (fds, j, 10000);      if (ret < 0)	break;      for (i = 0; i < ret; i++)	{	  psd = tcp_accept (fds[i], clientip, &port);	  if (psd <= 0)	    {	      printf ("tcp accept failed\n");	      break;	    }#ifdef __WIN32__	  cs.cb = cb;	  cs.sockid = psd;	  cs.servsockid = fds[i];	  strcpy (cs.clientip, clientip);	  cs.clientport = port;	  cs.parm = parm;	  CreateThread (NULL, 0, thread_procs, &cs, 0, (LPDWORD) & pid);	  check_pid (pid, 0);#else	  pid = fork ();	  if (pid > 0)	    {	      tcp_close (psd);	      check_pid (pid, 0);	      continue;	    }	  else if (pid == 0)	    {	      chld_flag = 1;	      for (j = 0; j < count; j++)		{		  tcp_close (sockid[j]);		}	      printf ("clientip[%s] port[%d] cb[%08X]\n", clientip, port, cb);	      cb (psd, clientip, port, parm, fds[i]);	      tcp_close (psd);	      break;	    }#endif /*__WIN32__*/	}      if (chld_flag == 1)	break;    }  for (i = 0; i < count; i++)    tcp_close (sockid[i]);}void tcp_server_loop (int sockid, tcp_call_back cb, void *parm){  int sds[1];  int count = 1;  sds[0] = sockid;  tcp_server_loop_multi (sds, count, cb, parm);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区电影在线| 色综合天天综合网天天狠天天| 欧美一区二区不卡视频| 青青草一区二区三区| 日韩一区国产二区欧美三区| 久久综合综合久久综合| 久久久久久夜精品精品免费| 国精产品一区一区三区mba桃花 | 激情综合亚洲精品| 久久蜜桃av一区精品变态类天堂| 国产福利不卡视频| 亚洲精品一卡二卡| 欧美日本国产一区| 国产在线不卡视频| 国产精品美日韩| 欧美亚洲国产bt| 久久国产尿小便嘘嘘| 一区二区三区欧美日韩| 欧美精品精品一区| 国产精品影音先锋| 亚洲美女区一区| 日韩精品一区二区三区中文精品| 国产99一区视频免费| 亚洲精品国产一区二区精华液 | 综合婷婷亚洲小说| 欧美色手机在线观看| 麻豆国产精品官网| 国产精品国产三级国产三级人妇 | 精品播放一区二区| 波多野结衣精品在线| 三级久久三级久久| 国产精品三级在线观看| 欧美日韩一区二区欧美激情| 韩国一区二区视频| 一区二区三区**美女毛片| 欧美大白屁股肥臀xxxxxx| 99热这里都是精品| 久久99日本精品| 亚洲乱码中文字幕综合| 欧美成人一区二区三区片免费 | 国产精品全国免费观看高清| 欧美在线免费视屏| 国产成人精品免费在线| 日韩国产欧美一区二区三区| 国产精品久久毛片a| 欧美刺激脚交jootjob| 欧美色爱综合网| av午夜一区麻豆| 国产精品一区不卡| 青青草一区二区三区| 亚洲国产成人av| 亚洲欧美日韩国产一区二区三区 | 日本大香伊一区二区三区| 国产在线不卡一区| 日本va欧美va瓶| 亚洲国产毛片aaaaa无费看| 中文字幕av一区 二区| 26uuuu精品一区二区| 欧美一区二区三区免费观看视频| 色中色一区二区| av电影天堂一区二区在线观看| 激情五月婷婷综合网| 蜜臀a∨国产成人精品| 亚洲成人中文在线| 亚洲欧美偷拍卡通变态| 中文字幕亚洲一区二区va在线| 久久一日本道色综合| 欧美精品一区视频| 5月丁香婷婷综合| 欧美日韩精品欧美日韩精品一 | 91精品国产综合久久福利软件| 91福利社在线观看| 欧美成人bangbros| 日韩欧美在线网站| 欧美一区2区视频在线观看| 91麻豆精品国产自产在线| 欧美日韩久久久一区| 在线看国产日韩| 欧美视频一区二区三区| 欧美理论电影在线| 欧美精品久久一区二区三区| 欧美日韩免费在线视频| 制服丝袜亚洲网站| 欧美久久久久免费| 日韩三级高清在线| 日韩欧美一区二区视频| 久久综合一区二区| 亚洲国产成人一区二区三区| 成人免费小视频| 一区二区在线免费| 亚洲成a人v欧美综合天堂| 日日夜夜精品视频天天综合网| 丝袜a∨在线一区二区三区不卡| 日韩专区一卡二卡| 久久99精品久久久久| 国产高清无密码一区二区三区| 成人综合在线观看| 色狠狠综合天天综合综合| 欧美久久久久久久久中文字幕| 日韩久久久久久| 国产三级欧美三级日产三级99 | 欧美视频日韩视频在线观看| 91精品国产综合久久香蕉麻豆| 26uuu国产日韩综合| 最新中文字幕一区二区三区| 亚洲成人免费看| 国产一本一道久久香蕉| 99久久久国产精品| 欧美一区二区三区在线看| 久久婷婷色综合| 亚洲柠檬福利资源导航| 美国欧美日韩国产在线播放| 国内精品伊人久久久久av影院| a级精品国产片在线观看| 欧美日韩精品专区| 国产欧美综合在线| 爽爽淫人综合网网站 | 岛国精品在线观看| 欧美日韩在线播放| 国产日韩欧美精品综合| 亚洲国产精品久久久久婷婷884| 精品一区二区三区免费播放| 丁香网亚洲国际| 欧美福利视频导航| 国产精品国产a级| 美女脱光内衣内裤视频久久网站| 成人av网址在线| 日韩视频免费直播| 亚洲精品国产a久久久久久| 麻豆精品国产91久久久久久| 一本色道**综合亚洲精品蜜桃冫| 日韩精品一区二区三区老鸭窝| 亚洲欧美自拍偷拍| 国产呦精品一区二区三区网站| 欧美无人高清视频在线观看| 中文字幕精品一区二区精品绿巨人 | 国产成人在线视频网址| 欧美精品 日韩| 樱花草国产18久久久久| 高清av一区二区| 亚洲精品一区二区三区影院| 香蕉久久一区二区不卡无毒影院| www.激情成人| 久久久99免费| 精品一区二区三区欧美| 欧美日韩免费不卡视频一区二区三区| 中文字幕亚洲综合久久菠萝蜜| 国产精品香蕉一区二区三区| 欧美成人一区二区三区| 日韩精品一区第一页| 91国产精品成人| 亚洲人成影院在线观看| 国产不卡视频一区| 久久精品亚洲精品国产欧美| 久久精品国产成人一区二区三区| 欧美日韩激情一区| 亚洲国产精品一区二区久久| 99在线视频精品| 中文字幕免费观看一区| 国产成人精品aa毛片| 久久久三级国产网站| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美日韩国产首页| 亚洲aⅴ怡春院| 欧美电影在线免费观看| 日韩精品久久理论片| 欧美高清一级片在线| 亚洲v中文字幕| 91精品一区二区三区久久久久久| 亚欧色一区w666天堂| 在线播放91灌醉迷j高跟美女 | 麻豆精品视频在线| 日韩一级大片在线观看| 久久精品国产99久久6| 欧美精品一区男女天堂| 国产高清无密码一区二区三区| 国产日韩三级在线| a4yy欧美一区二区三区| 一区二区三区中文在线| 欧美日韩国产综合一区二区三区| 亚洲高清在线视频| 日韩免费高清视频| 国产福利一区二区| 一级日本不卡的影视| 精品视频1区2区| 久久不见久久见中文字幕免费| 26uuu久久综合| 91丨九色丨国产丨porny| 亚洲影视资源网| 日韩美女主播在线视频一区二区三区| 国产乱一区二区| 亚洲婷婷国产精品电影人久久| 欧美三级资源在线| 精品一区二区三区免费| 日韩伦理电影网| 欧美高清视频www夜色资源网| 久久99精品久久久久久| 亚洲日本一区二区| 51午夜精品国产| 国产69精品一区二区亚洲孕妇|