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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? net.c

?? MySQL數據庫的ODBC接口程序源代碼
?? C
字號:
/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB   This file is public domain and comes with NO WARRANTY of any kind *//* Write and read of logical packets to/from socket** Writes are cached into net_buffer_length big packets.** Read packets are reallocated dynamicly when reading big packets.** Each logical packet has the following pre-info:** 3 byte length & 1 byte package-number.*/#ifdef _WIN32#include <winsock.h>#endif#include <global.h>#include <my_sys.h>#include <m_string.h>#include "mysql.h"#include <signal.h>#include <errno.h>#include <sys/types.h>#if !defined(__WIN32__) && !defined(MSDOS)#include <sys/socket.h>#endif#if !defined(MSDOS) && !defined(__WIN32__) && !defined(HAVE_BROKEN_NETINET_INCLUDES)#include <netinet/in_systm.h>#include <netinet/in.h>#include <netinet/ip.h>#include <netinet/tcp.h>#endif#ifdef MYSQL_SERVER#include "my_pthread.h"#include "thr_alarm.h"#endif#if defined(MSDOS) || defined(__WIN32__)#define raw_net_read(A,B,C) recv((A),(B),(C),0)#define raw_net_write(A,B,C) send((A),(B),(C),0)#ifdef __WIN32__#undef errno#undef EINTR#undef EAGAIN#define errno WSAGetLastError()#define EINTR  WSAEINTR#define EAGAIN WSAEINPROGRESS#endif#else /* unix */#define raw_net_read(A,B,C) read((A),(B),(C))#define raw_net_write(A,B,C) write((A),(B),(C))#endif#ifndef EWOULDBLOCK#define EWOULDBLOCK EAGAIN#endif/*** Give error if a too big packet is found** The server can change this with the -O switch, but because the client** can't normally do this the client should have a bigger max-buffer.*/#ifdef MYSQL_SERVERulong max_allowed_packet=65536;#elseulong max_allowed_packet=1024*1024L;#endifulong net_buffer_length=8192;	/* Default length. Enlarged if necessary */static int net_write_buff(NET *net,const byte *packet,uint len);	/* Init with packet info */int my_net_init(NET *net,Socket fd){  if (!(net->buff=(uchar*) my_malloc(net_buffer_length,MYF(MY_WME))))    return 1;  if (net_buffer_length > max_allowed_packet)    max_allowed_packet=net_buffer_length;  net->buff_end=net->buff+(net->max_packet=net_buffer_length);  net->fd=fd;  net->error=net->return_errno=0;  net->timeout=30;				/* Timeout for read */  net->pkt_nr=0;  net->write_pos=net->buff;  net->last_error[0]=0;#if defined(MYSQL_SERVER) && !defined(__WIN32__)  if (fd)  {    extern uint test_flags;			/* QQ */    net->fcntl=(fcntl(net->fd, F_GETFL) |		(!(test_flags & 8) ? O_NONBLOCK : 0));    (void) fcntl(net->fd, F_SETFL, net->fcntl);  }#endif#ifdef IPTOS_THROUGHPUT				/* For FreeBSD */  {    int tos = IPTOS_THROUGHPUT;    if (!setsockopt(fd, IPPROTO_IP, IP_TOS, (void*) &tos, sizeof(tos)))    {      int nodelay = 1;      if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void*) &nodelay,		     sizeof(nodelay)))      {	DBUG_PRINT("warning",("Couldn't set socket option for fast send"));      }    }  }#endif  return 0;}void net_end(NET *net){  if (net->buff)  {    my_free((gptr) net->buff,MYF(0));    net->buff=0;  }}	/* Remove unwanted characters from connection */#ifndef MYSQL_SERVERvoid net_clear(NET *net){#if !defined(MSDOS) && !defined(__WIN32__)  int old_fcntl=fcntl(net->fd, F_GETFL);  int count;  if (!(old_fcntl & O_NONBLOCK))    (void) fcntl(net->fd, F_SETFL, old_fcntl | O_NONBLOCK);  while ((count=(int) raw_net_read(net->fd,net->buff,net->max_packet)) > 0)  {    DBUG_PRINT("info",("skipped %d bytes from file: %d",count,net->fd));  }  if (!(old_fcntl & O_NONBLOCK))    (void) fcntl(net->fd, F_SETFL, old_fcntl);#else  ulong arg;  arg=1; ioctlsocket(net->fd,FIONBIO,&arg);  while ((int) raw_net_read(net->fd,net->buff,net->max_packet) > 0) ;  arg=0; ioctlsocket(net->fd,FIONBIO,&arg);#endif  net->pkt_nr=0;				/* Ready for new command */  net->write_pos=net->buff;}#endif	/* Flush write_buffer if not empty. */int net_flush(NET *net){  int error=0;  if (net->buff != net->write_pos)  {    error=net_real_write(net,(byte*) net->buff,			 (uint) (net->write_pos - net->buff));    net->write_pos=net->buff;  }  return error;}/******************************************************************************* Write something to server/clinet buffer*****************************************************************************//*** Write a logical packet with packet header** Format: Packet length (3 bytes), packet number(1 byte)*/intmy_net_write(NET *net,const byte *packet,uint len){  uchar buff[4];  int3store(buff,len);  buff[3]=(uchar) (net->pkt_nr++);  if (net_write_buff(net,(char*) buff,4))    return 1;  return net_write_buff(net,packet,len);}intnet_write_command(NET *net,uchar command,const byte *packet,uint len){  uchar buff[5];  uint length=len+1;				/* One extra byte for command */  int3store(buff,length);  buff[3]=(uchar) (net->pkt_nr++);  buff[4]=command;  if (!net->buff)  {						/* If net not initiated */    return test(net_real_write(net,(byte*) buff,5) ||		net_real_write(net,packet,len));  }  if (net_write_buff(net,(char*) buff,5))    return 1;  return test(net_write_buff(net,packet,len) || net_flush(net));}static intnet_write_buff(NET *net,const byte *packet,uint len){  uint left_length=(uint) (net->buff_end - net->write_pos);  while (len > left_length)  {    memcpy((byte*) net->write_pos,packet,left_length);    if (net_real_write(net,(byte*) net->buff,net->max_packet))      return 1;    net->write_pos=net->buff;    packet+=left_length;    len-=left_length;    left_length=net->max_packet;  }  memcpy((byte*) net->write_pos,packet,len);  net->write_pos+=len;  return 0;}#ifdef MYSQL_SERVER/*  Read and write using timeouts */intnet_real_write(NET *net,const byte *packet,uint len){  int length;  byte *pos,*end;  thr_alarm_t alarmed;  uint retry_count=0;#ifdef __WIN32__  alarmed=thr_alarm(60);			/* blocking read */#else  thr_alarm_init(&alarmed);#endif  pos=(byte*) packet; end=pos+len;  while (pos != end)  {    if ((int) (length=raw_net_write(net->fd,pos,(size_t) (end-pos))) <= 0)    {#ifndef __WIN32__      if ((errno == EAGAIN || errno == EWOULDBLOCK || length == 0)	  && !thr_alarm_in_use(alarmed))      {	if (!thr_alarm(&alarmed,60))		/* Don't wait too long */	{	  while (fcntl(net->fd, F_SETFL, net->fcntl & ~ O_NONBLOCK) < 0)	  {	    if (errno == EINTR && retry_count++ < 10)	      continue;	    fprintf(stderr,		    "%s: my_net_write: fcntl returned error %d, aborting thread\n",		    my_progname,errno);	    net->error=1;			/* Close socket */	    goto end;	  }	  retry_count=0;	  continue;	}      }      else#endif	if (thr_alarm_in_use(alarmed) && !thr_got_alarm(alarmed) &&	    (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK))      {	if (retry_count++ < 10)	    continue;	  fprintf(stderr, "%s: net_real_write looped, aborting thread\n",		  my_progname);      }      net->error=1;				/* Close socket */      break;    }    pos+=length;  } end:  if (thr_alarm_in_use(alarmed))  {    thr_end_alarm(&alarmed);#ifdef HAVE_FCNTL    (void) fcntl(net->fd, F_SETFL, net->fcntl);#endif  }  return (int) (pos != end);}#elseintnet_real_write(NET *net,const byte *packet,uint len){  int length;  byte *pos,*end;  bool alarmed=0;  pos=(byte*) packet; end=pos+len;  while (pos != end)  {    if ((int) (length=raw_net_write(net->fd,pos,(size_t) (end-pos))) <= 0)    {      if ((errno == EAGAIN || errno == EINTR || errno == EWOULDBLOCK ||	   length == 0) && !alarmed)      {	alarmed=1;#ifdef HAVE_FCNTL	(void) fcntl(net->fd, F_SETFL, net->fcntl & ~ O_NONBLOCK);#endif	continue;      }#ifdef THREAD_SAFE_CLIENT      if (errno == EINTR)      {	DBUG_PRINT("warning",("Interrupted write. Retrying..."));	continue;      }#endif      break;    }    pos+=length;  }#ifdef HAVE_FCNTL  if (alarmed)    (void) fcntl(net->fd, F_SETFL, net->fcntl);#endif  return (int) (pos != end);}#endif/******************************************************************************* Read something from server/clinet*****************************************************************************/#ifdef MYSQL_SERVERuintmy_net_read(NET *net){  uchar *pos;  ulong len,remain;  long length;  uint i,retry_count=0;  thr_alarm_t alarmed;  len=packet_error;  remain = 4;  pos=net->buff;#ifdef __WIN32__  alarmed=thr_alarm(net->timeout);		/* blocking read */#else  thr_alarm_init(&alarmed);#endif  for (i=0 ; i < 2 ; i++)  {    while (remain > 0)    {      errno=0;					/* For linux */      if ((int) (length=raw_net_read(net->fd,(char*) pos,remain)) <= 0)      {#ifndef __WIN32__	if ((errno == EAGAIN || errno == EWOULDBLOCK || length == 0)	    && !thr_alarm_in_use(alarmed))	{	  if (!thr_alarm(&alarmed,net->timeout)) /* Don't wait too long */	  {	    while (fcntl(net->fd, F_SETFL, net->fcntl & ~ O_NONBLOCK) < 0)	    {	      if (errno == EINTR && retry_count++ < 10)		continue;	      DBUG_PRINT("error",("fcntl returned error %d, aborting thread",				  errno));	      fprintf(stderr,		      "%s: my_net_read: fcntl returned error %d, aborting thread\n",		      my_progname,errno);	      len= packet_error;	      net->error=1;			/* Close socket */	      goto end;	    }	    retry_count=0;	    continue;	  }	}#endif	if (thr_alarm_in_use(alarmed) && !thr_got_alarm(alarmed) &&	    (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK))	{					/* Probably in MIT threads */	  if (retry_count++ < 10)	    continue;	  fprintf(stderr, "%s: my_net_read: looped with error %d, aborting thread\n",		  my_progname,errno);	}	DBUG_PRINT("error",("Got error %d reading socket",errno));	len= packet_error;	net->error=1;				/* Close socket */	goto end;      }      remain -= (ulong) length;      pos+= (ulong) length;    }    if (i == 0)    {					/* First parts is packet length */      if ((len=uint3korr(net->buff)) >= max_allowed_packet)      {	DBUG_PRINT("error",("Packet too large (%ld)", len));	fprintf(stderr,"Packet too large (%ld)\n", len);	len= packet_error;		/* Return error */	goto end;      }      if (net->buff[3] != (uchar) net->pkt_nr)      {	DBUG_PRINT("error",("Packets out of order (Found: %d, expected %d)",			    (int) net->buff[3],net->pkt_nr));	fprintf(stderr,"Packets out of order (Found: %d, expected %d)\n",		(int) net->buff[3],net->pkt_nr);	len= packet_error;	goto end;      }      net->pkt_nr++;      if (len >= net->max_packet)      {					/* Alloc bigger package */	uint pkt_length=(len+IO_SIZE) & ~(IO_SIZE-1);	uchar *buff=(uchar*) my_realloc((char*) net->buff,pkt_length,					MYF(MY_WME));	if (!buff)	{	  len=packet_error;	  goto end;	}	net->buff=net->write_pos=buff;	net->buff_end=buff+(net->max_packet=pkt_length);      }      pos=net->buff;      remain = len;    }  }  *pos = 0;				/* Safeguard */end:  if (thr_alarm_in_use(alarmed))  {    thr_end_alarm(&alarmed);#ifdef HAVE_FCNTL    (void) fcntl(net->fd, F_SETFL, net->fcntl);#endif  }  return(len);}#else /* !MYSQL_SERVER */uint my_net_read(NET *net){  uchar *pos,wrong_packet_nr;  ulong len,remain;  long length;  uint i;  bool alarmed=0,error_packet=0;  len= packet_error;  remain = 4;  pos=net->buff;			/* net->packet -4 */  for (i=0 ; i < 2 ; i++)  {    while (remain > 0)    {      if ((int) (length=raw_net_read(net->fd,pos,remain)) <= 0)      {	if ((errno == EAGAIN || errno == EINTR || errno == EWOULDBLOCK ||	     length == 0) && !alarmed)	{	  alarmed=1;#ifdef HAVE_FCNTL	  (void) fcntl(net->fd, F_SETFL, net->fcntl & ~ O_NONBLOCK);#endif	  continue;	}#ifdef THREAD_SAFE_CLIENT	if (errno == EINTR)	{	  DBUG_PRINT("warning",("Interrupted read. Retrying..."));	  continue;	}#endif	DBUG_PRINT("error",("Couldn't read packet: remain: %d  errno: %d  length: %d  alarmed: %d", remain,errno,length,alarmed));	len= packet_error;	goto end;      }      remain -= (ulong) length;      pos+= (ulong) length;    }    if (i == 0)    {					/* First parts is packet length */      if ((len=uint3korr(net->buff)) >= max_allowed_packet)      {	DBUG_PRINT("error",("Packet too large (%ld)",len));	fprintf(stderr,"Packet too large (%ld)\n", len);	return packet_error;		/* Return error */      }      if (net->buff[3] != (uchar) net->pkt_nr)      {	error_packet=1;			/* Probably error out of sync */	wrong_packet_nr=net->pkt_nr;	net->pkt_nr=net->buff[3];      }      else	net->pkt_nr++;      if (len >= net->max_packet)      {					/* Alloc bigger package */	uint pkt_length=(len+IO_SIZE) & ~(IO_SIZE-1);	uchar *buff=(uchar*) my_realloc((char*) net->buff,pkt_length,					MYF(MY_WME));	if (!buff)	{	  len=packet_error;	  break;	}	net->buff=net->write_pos=buff;	net->buff_end=buff+(net->max_packet=pkt_length);      }      pos=net->buff;      remain = len;    }  }  if (error_packet && net->buff[0] != (uchar) 255)  {    DBUG_PRINT("error",("Packets out of order (Found: %d, expected %d)\n",			(int) (uchar) net->pkt_nr,(int) wrong_packet_nr));    fprintf(stderr,"Packets out of order (Found: %d, expected %d)\n",	    (int) (uchar) net->pkt_nr,(int) wrong_packet_nr);    len=packet_error;  }end:#ifdef HAVE_FCNTL  if (alarmed)    (void) fcntl(net->fd, F_SETFL, net->fcntl);#endif  *pos = 0;				/* Safeguard */  return(len);}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品资源二区在线| 欧美疯狂性受xxxxx喷水图片| 香蕉影视欧美成人| 亚洲一区自拍偷拍| 亚洲精品第1页| 亚洲一区二区3| 亚洲一区二区三区小说| 亚洲成av人在线观看| 无码av免费一区二区三区试看| 亚洲一区国产视频| 日本不卡视频在线| 久久99国产精品成人| 国产一区二区不卡老阿姨| 国产盗摄视频一区二区三区| 成人激情文学综合网| 色综合一区二区三区| 在线观看日产精品| 91精品国产麻豆| 精品国产乱码久久久久久影片| 久久亚洲二区三区| 亚洲欧洲精品一区二区精品久久久| 中文字幕一区二区三区在线不卡| 亚洲精品成人悠悠色影视| 婷婷久久综合九色综合绿巨人| 男女男精品视频网| 成人看片黄a免费看在线| 在线观看视频一区二区欧美日韩| 欧美一区二区三区在线观看| 精品美女被调教视频大全网站| 中文字幕日本乱码精品影院| 国产精品福利电影一区二区三区四区| 国产精品萝li| 日韩不卡免费视频| 东方欧美亚洲色图在线| 91老师片黄在线观看| 91精品国产综合久久小美女| 日本一区二区三区电影| 亚洲444eee在线观看| 粉嫩aⅴ一区二区三区四区 | 精品伦理精品一区| 中文字幕一区二区三区不卡 | 成人综合在线观看| 欧美人动与zoxxxx乱| 国产欧美va欧美不卡在线| 亚洲成人tv网| 91亚洲精品一区二区乱码| 2024国产精品视频| 亚洲chinese男男1069| 波多野结衣中文字幕一区二区三区 | 午夜精品福利一区二区三区av | 亚洲成在线观看| 成人小视频在线观看| 91精品国产手机| 亚洲男女毛片无遮挡| 激情五月婷婷综合| 在线播放中文字幕一区| 日韩久久一区二区| 国产传媒日韩欧美成人| 日韩欧美一级在线播放| 一区二区三区加勒比av| 成人av网站免费观看| 国产日韩欧美精品一区| 人人精品人人爱| 欧美性大战久久久久久久蜜臀| 日本一区二区三区dvd视频在线| 日本欧洲一区二区| 欧美精品久久久久久久多人混战 | 日韩av在线发布| 欧美三级电影网站| 一区二区三区日韩精品视频| 暴力调教一区二区三区| 欧美激情中文字幕一区二区| 黑人巨大精品欧美一区| 精品电影一区二区| 国产呦萝稀缺另类资源| 欧美成人乱码一区二区三区| 伦理电影国产精品| 精品久久免费看| 国产真实乱子伦精品视频| 日韩欧美国产综合| 精品一区二区三区久久久| 欧美精品一区二区三区蜜桃视频| 麻豆91在线播放免费| 久久一区二区三区四区| 国产伦精品一区二区三区视频青涩| 久久久亚洲欧洲日产国码αv| 国产在线精品一区二区不卡了| 精品福利一区二区三区| 国产一区二区不卡| 亚洲欧洲日韩在线| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 一区二区三区四区不卡在线| 欧美无人高清视频在线观看| 日本aⅴ亚洲精品中文乱码| 欧美sm极限捆绑bd| 成人黄色小视频在线观看| 亚洲精品日日夜夜| 日韩一本二本av| 高清久久久久久| 一区二区三区四区在线播放 | 成人国产在线观看| 天天操天天干天天综合网| 日韩欧美你懂的| 成人国产精品免费观看视频| 一级女性全黄久久生活片免费| 欧美丰满一区二区免费视频| 国产精品综合网| 亚洲午夜久久久久中文字幕久| 日韩一区二区麻豆国产| 成人国产精品免费观看视频| 亚洲成人三级小说| 国产视频亚洲色图| 欧美日韩aaaaaa| 不卡视频免费播放| 美洲天堂一区二卡三卡四卡视频| 欧美激情一区二区三区在线| 欧美嫩在线观看| 99久久精品国产一区二区三区 | 欧美成人精品二区三区99精品| 成人av在线网| 麻豆一区二区三区| 自拍偷在线精品自拍偷无码专区| 欧美一区二区三区成人| 91视频观看视频| 国产揄拍国内精品对白| 婷婷中文字幕一区三区| 最新中文字幕一区二区三区| 久久这里只有精品视频网| 欧美性极品少妇| 99久久久国产精品免费蜜臀| 国模娜娜一区二区三区| 午夜精品123| 亚洲精品日产精品乱码不卡| 欧美激情一区二区三区四区| 91麻豆精品国产自产在线观看一区| 成人一区二区三区视频在线观看| 日本91福利区| 亚洲成人久久影院| 一区二区在线观看免费| 欧美国产日韩一二三区| 久久精品一区蜜桃臀影院| 91精品国产aⅴ一区二区| 欧美在线一二三| 91麻豆免费看片| 91麻豆国产福利精品| 成人一区在线观看| 成人av在线一区二区| 成人午夜免费电影| 成人app在线| 99综合电影在线视频| 成人av在线电影| av在线播放成人| 91丨国产丨九色丨pron| 91天堂素人约啪| 色视频欧美一区二区三区| 91色porny| 欧美三级一区二区| 欧美精品一二三区| 欧美一区二区三级| 日韩免费看的电影| 久久久久久久综合色一本| 久久久久国产精品麻豆ai换脸| 欧美精品一区二区三区四区| 国产三级一区二区| 亚洲色图视频网| 亚洲第一会所有码转帖| 蜜桃av一区二区| 国产成人啪免费观看软件| 99久久久免费精品国产一区二区| 91污在线观看| 欧美一区二区性放荡片| 日韩一区二区三区观看| 久久综合九色欧美综合狠狠| 欧美国产综合一区二区| 亚洲精选视频免费看| 日韩精品成人一区二区在线| 久久精品国产精品青草| 国产福利一区在线| 色综合久久综合| 91精品国产福利| 欧美激情综合网| 亚洲一区二区三区激情| 久久精品国产色蜜蜜麻豆| 成人性生交大片免费看中文 | 欧美日产国产精品| 精品999久久久| 亚洲精品第一国产综合野| 奇米影视在线99精品| av男人天堂一区| 欧美一区二区三区视频免费播放| 国产欧美视频一区二区| 婷婷中文字幕一区三区| 丰满白嫩尤物一区二区| 3d动漫精品啪啪1区2区免费| 欧美国产激情一区二区三区蜜月| 亚洲线精品一区二区三区| 国产精品影音先锋| 欧美图区在线视频| 国产精品成人一区二区艾草| 美女国产一区二区三区|