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

📄 net.cc

📁 cygwin, 著名的在win32下模拟unix操作系统的东东
💻 CC
📖 第 1 页 / 共 4 页
字号:
done:  syscall_printf ("%d = socket (%d, %d, %d)", res, af, type, protocol);  return res;}/* exported as sendto: standards? */extern "C" intcygwin_sendto (int fd, const void *buf, int len, int flags,	       const struct sockaddr *to, int tolen){  int res;  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  fhandler_socket *fh = get (fd);  if ((len && __check_invalid_read_ptr_errno (buf, (unsigned) len))      || (to && __check_invalid_read_ptr_errno (to, tolen))      || !fh)    res = -1;  else if ((res = len) != 0)    res = fh->sendto (buf, len, flags, to, tolen);  syscall_printf ("%d = sendto (%d, %p, %d, %x, %p, %d)",		  res, fd, buf, len, flags, to, tolen);  return res;}/* exported as recvfrom: standards? */extern "C" intcygwin_recvfrom (int fd, void *buf, int len, int flags,		 struct sockaddr *from, int *fromlen){  int res;  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  fhandler_socket *fh = get (fd);  if ((len && __check_null_invalid_struct_errno (buf, (unsigned) len))      || (from	  && (check_null_invalid_struct_errno (fromlen)	      || __check_null_invalid_struct_errno (from, (unsigned) *fromlen)))      || !fh)    res = -1;  else if ((res = len) != 0)    res = fh->recvfrom (buf, len, flags, from, fromlen);  syscall_printf ("%d = recvfrom (%d, %p, %d, %x, %p, %p)",		  res, fd, buf, len, flags, from, fromlen);  return res;}/* exported as setsockopt: standards? */extern "C" intcygwin_setsockopt (int fd, int level, int optname, const void *optval,		   int optlen){  int res;  fhandler_socket *fh = get (fd);  const char *name = "error";  /* For the following debug_printf */  switch (optname)    {      case SO_DEBUG:	name = "SO_DEBUG";	break;      case SO_ACCEPTCONN:	name = "SO_ACCEPTCONN";	break;      case SO_REUSEADDR:	name = "SO_REUSEADDR";	break;      case SO_KEEPALIVE:	name = "SO_KEEPALIVE";	break;      case SO_DONTROUTE:	name = "SO_DONTROUTE";	break;      case SO_BROADCAST:	name = "SO_BROADCAST";	break;      case SO_USELOOPBACK:	name = "SO_USELOOPBACK";	break;      case SO_LINGER:	name = "SO_LINGER";	break;      case SO_OOBINLINE:	name = "SO_OOBINLINE";	break;      case SO_ERROR:	name = "SO_ERROR";	break;    }  if ((optval && __check_invalid_read_ptr_errno (optval, optlen)) || !fh)    res = -1;  else    {      res = setsockopt (fh->get_socket (), level, optname,			(const char *) optval, optlen);      if (optlen == 4)	syscall_printf ("setsockopt optval=%x", *(long *) optval);      if (res)	set_winsock_errno ();    }  syscall_printf ("%d = setsockopt (%d, %d, %x (%s), %p, %d)",		  res, fd, level, optname, name, optval, optlen);  return res;}/* exported as getsockopt: standards? */extern "C" intcygwin_getsockopt (int fd, int level, int optname, void *optval, int *optlen){  int res;  fhandler_socket *fh = get (fd);  const char *name = "error";  /* For the following debug_printf */  switch (optname)    {      case SO_DEBUG:	name = "SO_DEBUG";	break;      case SO_ACCEPTCONN:	name = "SO_ACCEPTCONN";	break;      case SO_REUSEADDR:	name = "SO_REUSEADDR";	break;      case SO_KEEPALIVE:	name = "SO_KEEPALIVE";	break;      case SO_DONTROUTE:	name = "SO_DONTROUTE";	break;      case SO_BROADCAST:	name = "SO_BROADCAST";	break;      case SO_USELOOPBACK:	name = "SO_USELOOPBACK";	break;      case SO_LINGER:	name = "SO_LINGER";	break;      case SO_OOBINLINE:	name = "SO_OOBINLINE";	break;      case SO_ERROR:	name = "SO_ERROR";	break;    }  if ((optval       && (check_null_invalid_struct_errno (optlen)	   || __check_null_invalid_struct_errno (optval, (unsigned) *optlen)))      || !fh)    res = -1;  else    {      res = getsockopt (fh->get_socket (), level, optname, (char *) optval,			(int *) optlen);      if (optname == SO_ERROR)	{	  int *e = (int *) optval;	  *e = find_winsock_errno (*e);	}      if (res)	set_winsock_errno ();    }  syscall_printf ("%d = getsockopt (%d, %d, %x (%s), %p, %p)",		  res, fd, level, optname, name, optval, optlen);  return res;}/* exported as connect: standards? */extern "C" intcygwin_connect (int fd, const struct sockaddr *name, int namelen){  int res;  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  fhandler_socket *fh = get (fd);  if (__check_invalid_read_ptr_errno (name, namelen) || !fh)    res = -1;  else    res = fh->connect (name, namelen);  syscall_printf ("%d = connect (%d, %p, %d)", res, fd, name, namelen);  return res;}static voidfree_servent_ptr (struct servent *&p){  if (p)    {      debug_printf ("servent: %s", p->s_name);      if (p->s_name)	free (p->s_name);      if (p->s_proto)	free (p->s_proto);      free_char_list (p->s_aliases);      p = NULL;    }}#pragma pack(push,2)struct pservent{  char *s_name;  char **s_aliases;  short s_port;  char *s_proto;};#pragma pack(pop)static struct servent *dup_servent_ptr (struct servent *src){  if (!src)    return NULL;  struct servent *dst = (struct servent *) calloc (1, sizeof *dst);  if (!dst)    return NULL;  debug_printf ("servent: %s", src->s_name);  dst->s_port = src->s_port;  if (src->s_name && !(dst->s_name = strdup (src->s_name)))    goto out;  if (src->s_aliases && !(dst->s_aliases = dup_char_list (src->s_aliases)))    goto out;  char *s_proto;  if (IsBadReadPtr (src->s_proto, sizeof (src->s_proto))      && !IsBadReadPtr (((pservent *) src)->s_proto, sizeof (src->s_proto)))    s_proto = ((pservent *) src)->s_proto;  else    s_proto = src->s_proto;  if (s_proto && !(dst->s_proto = strdup (s_proto)))    goto out;  debug_printf ("servent: copied %s", dst->s_name);  return dst;out:  free_servent_ptr (dst);  return NULL;}#ifdef _MT_SAFE#define servent_buf  _reent_winsup ()->_servent_buf#elsestatic struct servent *servent_buf = NULL;#endif/* exported as getservbyname: standards? */extern "C" struct servent *cygwin_getservbyname (const char *name, const char *proto){  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  if (check_null_str_errno (name)      || (proto != NULL && check_null_str_errno (proto)))    return NULL;  free_servent_ptr (servent_buf);  servent_buf = dup_servent_ptr (getservbyname (name, proto));  if (!servent_buf)    set_winsock_errno ();  syscall_printf ("%x = getservbyname (%s, %s)", servent_buf, name, proto);  return servent_buf;}/* exported as getservbyport: standards? */extern "C" struct servent *cygwin_getservbyport (int port, const char *proto){  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  if (proto != NULL && check_null_str_errno (proto))    return NULL;  free_servent_ptr (servent_buf);  servent_buf = dup_servent_ptr (getservbyport (port, proto));  if (!servent_buf)    set_winsock_errno ();  syscall_printf ("%x = getservbyport (%d, %s)", servent_buf, port, proto);  return servent_buf;}extern "C" intcygwin_gethostname (char *name, size_t len){  int PASCAL win32_gethostname (char *, int);  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  if (__check_null_invalid_struct_errno (name, len))    return -1;  if (wsock32_handle == NULL || win32_gethostname (name, len) == SOCKET_ERROR)    {      DWORD local_len = len;      if (!GetComputerNameA (name, &local_len))	{	  set_winsock_errno ();	  return -1;	}    }  debug_printf ("name %s", name);  h_errno = 0;  return 0;}static voidfree_hostent_ptr (struct hostent *&p){  if (p)    {      debug_printf ("hostent: %s", p->h_name);      if (p->h_name)	free ((void *) p->h_name);      free_char_list (p->h_aliases);      free_addr_list (p->h_addr_list);      p = NULL;    }}static struct hostent *dup_hostent_ptr (struct hostent *src){  if (!src)    return NULL;  struct hostent *dst = (struct hostent *) calloc (1, sizeof *dst);  if (!dst)    return NULL;  debug_printf ("hostent: %s", src->h_name);  dst->h_addrtype = src->h_addrtype;  dst->h_length = src->h_length;  if (src->h_name && !(dst->h_name = strdup (src->h_name)))    goto out;  if (src->h_aliases && !(dst->h_aliases = dup_char_list (src->h_aliases)))    goto out;  if (src->h_addr_list      && !(dst->h_addr_list = dup_addr_list (src->h_addr_list, src->h_length)))    goto out;  debug_printf ("hostent: copied %s", dst->h_name);  return dst;out:  free_hostent_ptr (dst);  return NULL;}#ifdef _MT_SAFE#define hostent_buf  _reent_winsup ()->_hostent_buf#elsestatic struct hostent *hostent_buf = NULL;#endif/* exported as gethostbyname: standards? */extern "C" struct hostent *cygwin_gethostbyname (const char *name){  static unsigned char tmp_addr[4];  static struct hostent tmp;  static char *tmp_aliases[1];  static char *tmp_addr_list[2];  static int a, b, c, d;  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  if (check_null_str_errno (name))    return NULL;  if (sscanf (name, "%d.%d.%d.%d", &a, &b, &c, &d) == 4)    {      /* In case you don't have DNS, at least x.x.x.x still works */      memset (&tmp, 0, sizeof (tmp));      tmp_addr[0] = a;      tmp_addr[1] = b;      tmp_addr[2] = c;      tmp_addr[3] = d;      tmp_addr_list[0] = (char *) tmp_addr;      tmp.h_name = name;      tmp.h_aliases = tmp_aliases;      tmp.h_addrtype = 2;      tmp.h_length = 4;      tmp.h_addr_list = tmp_addr_list;      return &tmp;    }  free_hostent_ptr (hostent_buf);  hostent_buf = dup_hostent_ptr (gethostbyname (name));  if (!hostent_buf)    {      set_winsock_errno ();      set_host_errno ();    }  else    {      debug_printf ("h_name %s", hostent_buf->h_name);      h_errno = 0;    }  return hostent_buf;}/* exported as gethostbyaddr: standards? */extern "C" struct hostent *cygwin_gethostbyaddr (const char *addr, int len, int type){  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  if (__check_invalid_read_ptr_errno (addr, len))    return NULL;  free_hostent_ptr (hostent_buf);  hostent_buf = dup_hostent_ptr (gethostbyaddr (addr, len, type));  if (!hostent_buf)    {      set_winsock_errno ();      set_host_errno ();    }  else    {      debug_printf ("h_name %s", hostent_buf->h_name);      h_errno = 0;    }  return hostent_buf;}/* exported as accept: standards? */extern "C" intcygwin_accept (int fd, struct sockaddr *peer, int *len){  int res;  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  fhandler_socket *fh = get (fd);  if ((peer && (check_null_invalid_struct_errno (len)		|| __check_null_invalid_struct_errno (peer, (unsigned) *len)))      || !fh)    res = -1;  else    res = fh->accept (peer, len);  syscall_printf ("%d = accept (%d, %p, %p)", res, fd, peer, len);  return res;}/* exported as bind: standards? */extern "C" intcygwin_bind (int fd, const struct sockaddr *my_addr, int addrlen){  int res;  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  fhandler_socket *fh = get (fd);  if (__check_invalid_read_ptr_errno (my_addr, addrlen) || !fh)    res = -1;  else    res = fh->bind (my_addr, addrlen);  syscall_printf ("%d = bind (%d, %p, %d)", res, fd, my_addr, addrlen);  return res;}/* exported as getsockname: standards? */extern "C" intcygwin_getsockname (int fd, struct sockaddr *addr, int *namelen){  int res;  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  fhandler_socket *fh = get (fd);  if (check_null_invalid_struct_errno (namelen)      || __check_null_invalid_struct_errno (addr, (unsigned) *namelen)      || !fh)    res = -1;  else    res = fh->getsockname (addr, namelen);  syscall_printf ("%d = getsockname (%d, %p, %p)", res, fd, addr, namelen);  return res;}/* exported as listen: standards? */extern "C" intcygwin_listen (int fd, int backlog){  int res;  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  fhandler_socket *fh = get (fd);  if (!fh)    res = -1;  else    res = fh->listen (backlog);  syscall_printf ("%d = listen (%d, %d)", res, fd, backlog);  return res;}/* exported as shutdown: standards? */extern "C" intcygwin_shutdown (int fd, int how){  int res;  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  fhandler_socket *fh = get (fd);  if (!fh)    res = -1;  else    res = fh->shutdown (how);  syscall_printf ("%d = shutdown (%d, %d)", res, fd, how);  return res;}/* exported as hstrerror: BSD 4.3  */extern "C" const char *cygwin_hstrerror (int err){  int i;  for (i = 0; host_errmap[i].e != 0; ++i)

⌨️ 快捷键说明

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