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

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

?? net.c

?? mysql的ODBC接口程序源代碼。用ODBC連接mysql數(shù)據(jù)庫
?? 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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕不卡一区| 亚洲欧洲www| 欧美日本一区二区| 欧美伊人久久大香线蕉综合69| 国产.欧美.日韩| 国产不卡免费视频| av电影一区二区| 一本到不卡免费一区二区| 色综合婷婷久久| 精品视频免费看| 日韩欧美国产1| 国产亚洲美州欧州综合国| 中文字幕欧美激情| 亚洲精品老司机| 午夜亚洲国产au精品一区二区| 亚洲成人免费在线| 青青草伊人久久| 国产一区二区网址| 91丨porny丨国产| 欧美三级电影网站| 亚洲精品一区二区三区精华液 | 日本精品视频一区二区三区| 99热精品国产| 欧美日韩亚洲国产综合| 日韩精品一区二区三区四区| 久久久久久电影| 亚洲欧美韩国综合色| 午夜亚洲福利老司机| 精品一区二区三区免费视频| 粉嫩aⅴ一区二区三区四区| av午夜一区麻豆| 欧美丰满少妇xxxbbb| 国产欧美日韩另类一区| 亚洲另类色综合网站| 久久电影国产免费久久电影| 成人性色生活片| 911国产精品| 欧美激情一区二区| 丝袜美腿亚洲色图| 成人黄色在线看| 欧美一区二区三区白人| 国产精品嫩草99a| 美国十次综合导航| 91亚洲精品久久久蜜桃| 日韩免费在线观看| 亚洲国产综合色| 豆国产96在线|亚洲| 制服丝袜国产精品| 中文字幕中文在线不卡住| 奇米综合一区二区三区精品视频| 99久久精品费精品国产一区二区| 51精品国自产在线| 亚洲综合一二三区| 97se亚洲国产综合在线| 亚洲精品一区二区三区四区高清| 亚洲自拍欧美精品| 99精品热视频| 中文字幕免费在线观看视频一区| 蜜桃久久av一区| 欧美日韩你懂得| 一区二区三区**美女毛片| 不卡av在线免费观看| 2020国产精品| 成人激情文学综合网| 8x8x8国产精品| 亚洲成人自拍一区| 欧美色区777第一页| 亚洲视频中文字幕| av欧美精品.com| 中文久久乱码一区二区| 国产精品一级二级三级| 欧美sm极限捆绑bd| 精品亚洲免费视频| www国产成人免费观看视频 深夜成人网| 亚洲成a人片综合在线| 91国在线观看| 天天影视涩香欲综合网| 精品视频一区三区九区| 亚洲成人在线网站| 日韩午夜三级在线| 久久国产精品免费| 337p粉嫩大胆色噜噜噜噜亚洲| 人禽交欧美网站| 欧美电影免费观看高清完整版在| 玖玖九九国产精品| 久久免费精品国产久精品久久久久| 蜜桃91丨九色丨蝌蚪91桃色| 日韩写真欧美这视频| 国产美女久久久久| 综合中文字幕亚洲| 欧美在线观看视频在线| 日日摸夜夜添夜夜添精品视频 | 精品sm捆绑视频| 国产精品18久久久久久vr| 国产午夜三级一区二区三| 成人一区在线看| 一区二区三区免费| 精品蜜桃在线看| www.久久久久久久久| 亚洲一区二区三区激情| 日韩一区二区三区四区| 国产成人综合在线播放| 亚洲精品免费在线播放| 欧美一区二区在线免费观看| 国产一区二区视频在线| 亚洲日本乱码在线观看| 欧美精品丝袜久久久中文字幕| 美日韩黄色大片| 中文字幕一区二区三区四区不卡| 欧美日韩视频第一区| 精品一区二区在线看| 亚洲欧美另类久久久精品| 日韩限制级电影在线观看| 成人高清免费在线播放| 天天色天天操综合| 国产精品欧美一区喷水| 欧美日本韩国一区二区三区视频| 国产成人午夜视频| 亚洲成人tv网| 亚洲欧洲99久久| 精品国产一区二区亚洲人成毛片| 91麻豆国产自产在线观看| 免费xxxx性欧美18vr| 亚洲免费观看高清在线观看| 精品成人一区二区三区| 欧美亚洲免费在线一区| 成人sese在线| 国产一本一道久久香蕉| 男人的j进女人的j一区| 亚洲乱码国产乱码精品精的特点| 久久久久久电影| 制服丝袜亚洲色图| 在线观看免费成人| 99精品欧美一区二区三区小说| 免费看精品久久片| 午夜精品aaa| 夜夜亚洲天天久久| 亚洲欧美一区二区三区极速播放 | 一区二区三区免费| 欧美国产成人精品| 国产欧美一区视频| 久久精品一级爱片| 久久精品一区蜜桃臀影院| 91精品国产色综合久久不卡电影| 欧美午夜免费电影| 在线精品视频免费观看| 成人97人人超碰人人99| 国产aⅴ综合色| 大陆成人av片| 成人动漫精品一区二区| 高清在线观看日韩| av男人天堂一区| 91丝袜国产在线播放| 97久久人人超碰| 欧洲亚洲精品在线| 欧美精品高清视频| 91麻豆精品国产91久久久更新时间 | 亚洲国产精品久久人人爱蜜臀 | 欧洲国内综合视频| 欧美三区免费完整视频在线观看| 在线视频欧美区| 欧美色倩网站大全免费| 制服视频三区第一页精品| 欧美一区二区三区日韩| 精品国产网站在线观看| 精品国产在天天线2019| 中文字幕第一页久久| 亚洲三级免费电影| 亚洲福利一区二区三区| 免费看日韩精品| 国产成人免费在线| 色综合久久综合网| 欧美日韩午夜在线视频| 欧美一二三四区在线| 国产欧美一区二区三区沐欲 | 欧美性猛交xxxx黑人交| 欧美猛男男办公室激情| 欧美大肚乱孕交hd孕妇| 中文字幕乱码久久午夜不卡| 一区二区在线观看免费视频播放 | 日韩三级.com| 国产亚洲成年网址在线观看| 亚洲欧洲国产日韩| 蜜桃传媒麻豆第一区在线观看| 国产精品一区二区免费不卡| 91在线国产观看| 日韩欧美你懂的| 亚洲精品久久久蜜桃| 久久99九九99精品| 色哟哟一区二区| 精品精品欲导航| 亚洲人成在线播放网站岛国| 麻豆91小视频| 欧美自拍丝袜亚洲| 日本一区二区三区四区| 三级欧美韩日大片在线看| 99久久夜色精品国产网站| 91精品在线观看入口| 1000精品久久久久久久久| 久久国产人妖系列|