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

📄 getname.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
字号:
/*
 *
 *   BSD sockets functionality for Waterloo TCP/IP
 *
 *   Version
 *
 *   0.5 : Dec 18, 1997 : G. Vanem - created
 */

#include "socket.h"

#if defined(USE_BSD_FUNC)

int getsockname (int s, struct sockaddr *name, int *namelen)
{
  Socket *socket = _socklist_find (s);

  SOCK_PROLOGUE (socket, "\ngetsockname:%d", s);

  if (!name || !namelen || (*namelen < sizeof(struct sockaddr)))
  {
    SOCK_DEBUGF ((socket, ", EINVAL"));
    SOCK_ERR (EINVAL);
    *namelen = 0;
    return (-1);
  }

  if (!socket->local_addr)
  {
    SOCK_DEBUGF ((socket, ", EINVAL"));
    SOCK_ERR (EINVAL);    /* according HP/UX manpage */
    return (-1);
  }

  VERIFY_RW (name, *namelen);

  *namelen = sizeof(struct sockaddr);
  memcpy (name, socket->local_addr, *namelen);

  SOCK_DEBUGF ((socket, ", %s (%d)",
                inet_ntoa(socket->local_addr->sin_addr),
                ntohs(socket->local_addr->sin_port)));
  return (0);
}

int getpeername (int s, struct sockaddr *name, int *namelen)
{
  Socket *socket = _socklist_find (s);

  SOCK_PROLOGUE (socket, "\ngetpeername:%d", s);

  if (name && namelen)
  {
    if (*namelen < sizeof(struct sockaddr))
    {
      SOCK_DEBUGF ((socket, ", EINVAL"));
      SOCK_ERR (EINVAL);
      *namelen = 0;
      return (-1);
    }
    if (!(socket->so_state & SS_ISCONNECTED))
    {
      SOCK_DEBUGF ((socket, ", ENOTCONN"));
      SOCK_ERR (ENOTCONN);
      return (-1);
    }
    VERIFY_RW (name, *namelen);

    *namelen = sizeof (struct sockaddr);
    memcpy (name, socket->remote_addr, *namelen);

    SOCK_DEBUGF ((socket, ", %s (%d)",
                  inet_ntoa(socket->remote_addr->sin_addr),
                  ntohs(socket->remote_addr->sin_port)));
  }
  return (0);
}
#endif

⌨️ 快捷键说明

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