【 getsockname系统调用】
功能描述:
返回指定套接字的名称。
用法:
#include
int getsockname(int sock, struct sockaddr *name, socklen_t *namelen);
参数:
sock:需要获取名称的套接字。
name:存放所获取套接字名称的缓冲区。
nemalen:作为入口参数,name指向空间的最大长度。作为出口参数,name的实际长度。
返回说明:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EBADF:sock不是有效的文件描述词
EFAULT:name指向的内存并非有效的进程空间
EINVAL:namelen无效,可能为负值
ENOBUFS:执行操作时,系统资源不足
ENOTCONN:套接字尚未连接上
ENOTSOCK:sock描述的不是套接字
Open C 套接字: getpeername 方法
getpeername方法获取所连接的对等方套接字的名称。
int getpeername (int s, struct sockaddr * restrict name, socklen_t * restrict namelen);
getpeername系统调用返回已连接到套接字s的对等方的名称。namelen参数应被初始化以指出由name所指空间的总额。返回时它含
有所返回的name的实际大小(按字节)。若提供的buffer太小,那么名字将被截取。
下面的代码片段演示了getpeername方法的用法:
#include
#include
#include
void GetSockName()
{
int sock_fd;
int newsock_fd;
struct sockaddr_in addr;
struct sockaddr_in ss;
struct sockaddr_in new_socket;
unsigned int len;
unsigned int addr_len;
sock_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(5000);
bind(sock_fd,(struct sockaddr*)&addr,sizeof(addr));
listen(sock_fd,1);
newsock_fd = accept(sock_fd,(struct sockaddr*)&new_socket,&addr_len); // Code blocks here
// Assuming client has connected to the server.
len = sizeof(ss);
getpeername(sock_fd,(struct sockaddr*)&ss,&len);
close(newsock_fd);
close(sock_fd);
}
阅读(9351) | 评论(0) | 转发(0) |