getpeername.c

来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 50 行

C
50
字号
/* posix */#include <sys/types.h>#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <fcntl.h>#include <string.h>#include <errno.h>/* bsd extensions */#include <sys/uio.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/un.h>#include "priv.h"intgetpeername(int fd, struct sockaddr *addr, int *alen){	Rock *r;	int i;	struct sockaddr_in *rip;	struct sockaddr_un *runix;	r = _sock_findrock(fd, 0);	if(r == 0){		errno = ENOTSOCK;		return -1;	}	switch(r->domain){	case PF_INET:		rip = (struct sockaddr_in*)&r->raddr;		memmove(addr, rip, sizeof(struct sockaddr_in));		*alen = sizeof(struct sockaddr_in);		break;	case PF_UNIX:		runix = (struct sockaddr_un*)&r->raddr;		i = &runix->sun_path[strlen(runix->sun_path)] - (char*)runix;		memmove(addr, runix, i);		*alen = i;		break;	default:		errno = EAFNOSUPPORT;		return -1;	}	return 0;}

⌨️ 快捷键说明

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