⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bind.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
/* posix */#include <sys/types.h>#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <fcntl.h>#include <string.h>#include <errno.h>#include <sys/stat.h>#include <signal.h>/* socket extensions */#include <sys/uio.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/un.h>/* plan 9 */#include "lib.h"#include "sys9.h"#include "priv.h"intbind(int fd, void *a, int alen){	int n, len, cfd;	Rock *r;	char msg[128];	struct sockaddr_in *lip;	/* assign the address */	r = _sock_findrock(fd, 0);	if(r == 0){		errno = ENOTSOCK;		return -1;	}	if(alen > sizeof(r->addr)){		errno = ENAMETOOLONG;		return -1;	}	memmove(&r->addr, a, alen);	/* the rest is IP sepecific */	if (r->domain != PF_INET)		return 0;	cfd = open(r->ctl, O_RDWR);	if(cfd < 0){		errno = EBADF;		return -1;	}	lip = (struct sockaddr_in*)&r->addr;	if(lip->sin_port > 0)		sprintf(msg, "bind %d", ntohs(lip->sin_port));	else		sprintf(msg, "bind *");	n = write(cfd, msg, strlen(msg));	if(n < 0){		errno = EOPNOTSUPP;	/* Improve error reporting!!! */		close(cfd);		return -1;	}	close(cfd);	if(lip->sin_port <= 0)		_sock_ingetaddr(r, lip, &len, "local");	return 0;}

⌨️ 快捷键说明

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