bindresvport.c

来自「klibc精简化的c程序库」· C语言 代码 · 共 47 行

C
47
字号
/* * inet/bindresvport.c */#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <string.h>#include <unistd.h>#define START_PORT	768#define END_PORT	IPPORT_RESERVED#define NUM_PORTS	(END_PORT - START_PORT)int bindresvport(int sd, struct sockaddr_in *sin){	struct sockaddr_in me;	static short port;	int ret = 0;	int i;	if (sin == NULL) {		memset(&me, 0, sizeof(me));		sin = &me;		sin->sin_family = AF_INET;	} else if (sin->sin_family != AF_INET) {		errno = EPFNOSUPPORT;		return -1;	}	if (port == 0)		port = START_PORT + (getpid() % NUM_PORTS);	for (i = 0; i < NUM_PORTS; i++, port++) {		if (port == END_PORT)			port = START_PORT;		sin->sin_port = htons(port);		ret = bind(sd, (struct sockaddr *)sin, sizeof(*sin));		if (ret != -1)			break;	}	return ret;}

⌨️ 快捷键说明

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