Chinaunix首页 | 论坛 | 博客
  • 博客访问: 281856
  • 博文数量: 176
  • 博客积分: 2516
  • 博客等级: 少校
  • 技术积分: 1350
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-01 11:18
文章分类
文章存档

2011年(1)

2010年(18)

2009年(157)

我的朋友

分类: LINUX

2010-03-10 09:53:46

【 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);
}
阅读(9307) | 评论(0) | 转发(0) |
0

上一篇:diff命令详解

下一篇:X Window原理详解

给主人留下些什么吧!~~