getname.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 79 行
C
79 行
/*
*
* 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 + =
减小字号Ctrl + -
显示快捷键?