/* Our own header. Tabs are set for 4 spaces, not 8 */
#ifndef __unp_h
#define __unp_h
#include "../config.h" /* configuration options for current OS */
/* "../config.h" is generated by configure */
/* If anything changes in the following list of #includes, must change
acsite.m4 also, for configure's tests. */
#include <sys/types.h> /* basic system data types */
#include <sys/socket.h> /* basic socket definitions */
#include <sys/time.h> /* timeval{} for select() */
#include <time.h> /* timespec{} for pselect() */
#include <netinet/in.h> /* sockaddr_in{} and other Internet defns */
#include <arpa/inet.h> /* inet(3) functions */
#include <errno.h>
#include <fcntl.h> /* for nonblocking */
#include <netdb.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h> /* for S_xxx file mode constants */
#include <sys/uio.h> /* for iovec{} and readv/writev */
#include <unistd.h>
#include <sys/wait.h>
#include <sys/un.h> /* for Unix domain sockets */
#ifdef HAVE_SYS_SELECT_H
# include <sys/select.h> /* for convenience */
#endif
#ifdef HAVE_SYS_SYSCTL_H
# include <sys/sysctl.h>
#endif
#ifdef HAVE_POLL_H
# include <poll.h> /* for convenience */
#endif
#ifdef HAVE_SYS_EVENT_H
# include <sys/event.h> /* for kqueue */
#endif
#ifdef HAVE_STRINGS_H
# include <strings.h> /* for convenience */
#endif
/* Three headers are normally needed for socket/file ioctl's:
* <sys/ioctl.h>, <sys/filio.h>, and <sys/sockio.h>.
*/
#ifdef HAVE_SYS_IOCTL_H
# include <sys/ioctl.h>
#endif
#ifdef HAVE_SYS_FILIO_H
# include <sys/filio.h>
#endif
#ifdef HAVE_SYS_SOCKIO_H
# include <sys/sockio.h>
#endif
#ifdef HAVE_PTHREAD_H
# include <pthread.h>
#endif
#ifdef HAVE_NET_IF_DL_H
# include <net/if_dl.h>
#endif
#ifdef HAVE_NETINET_SCTP_H
#include <netinet/sctp.h>
#endif
/* OSF/1 actually disables recv() and send() in <sys/socket.h> */
#ifdef __osf__
#undef recv
#undef send
#define recv(a,b,c,d) recvfrom(a,b,c,d,0,0)
#define send(a,b,c,d) sendto(a,b,c,d,0,0)
#endif
#ifndef INADDR_NONE
#define INADDR_NONE 0xffffffff /* should have been in <netinet/in.h> */
#endif
#ifndef SHUT_RD /* these three POSIX names are new */
#define SHUT_RD 0 /* shutdown for reading */
#define SHUT_WR 1 /* shutdown for writing */
#define SHUT_RDWR 2 /* shutdown for reading and writing */
#endif
#ifndef INET_ADDRSTRLEN
#define INET_ADDRSTRLEN 16 /* "ddd.ddd.ddd.ddd\0"
1234567890123456 */
#endif
/* Define following even if IPv6 not supported, so we can always allocate
an adequately sized buffer without #ifdefs in the code. */
#ifndef INET6_ADDRSTRLEN
#define INET6_ADDRSTRLEN 46 /* max size of IPv6 address string:
"xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx" or
"xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:ddd.ddd.ddd.ddd\0"
1234567890123456789012345678901234567890123456 */
#endif
/* Define bzero() as a macro if it's not in standard C library. */
#ifndef HAVE_BZERO
#define bzero(ptr,n) memset (ptr, 0, n)
#endif
/* Older resolvers do not have gethostbyname2() */
#ifndef HAVE_GETHOSTBYNAME2
#define gethostbyname2(host,family) gethostbyname((host))
#endif
/* The structure returned by recvfrom_flags() */
struct unp_in_pktinfo {
struct in_addr ipi_addr; /* dst IPv4 address */
int ipi_ifindex; /* received interface index */
};
/* We need the newer CMSG_LEN() and CMSG_SPACE() macros, but few
implementations support them today. These two macros really need
an ALIGN() macro, but each implementation does this differently. */
#ifndef CMSG_LEN
#define CMSG_LEN(size) (sizeof(struct cmsghdr) + (size))
#endif
#ifndef CMSG_SPACE
#define CMSG_SPACE(size) (sizeof(struct cmsghdr) + (size))
#endif
/* POSIX requires the SUN_LEN() macro, but not all implementations define it (yet). Note that this 4.4BSD macro works regardless whether there is a length field or not. */
#ifndef SUN_LEN
# define SUN_LEN (su) \
(sizeof (*(su)) - sizeof ((su)->sun_path) + strlen((su)->sun_path))
#endif
/* POSIX renames "Unix domain" as "local IPC."
Not all systems define AF_LOCAL and PF_LOCAL (yet). */
#ifndef AF_LOCAL
#define AF_LOCAL AF_UNIX
#endif
#ifndef PF_LOCAL
#define PF_LOCAL PF_UNIX
#endif
/* POSIX requires that an #include of <poll.h> define INFTIM, but many
systems still define it in <sys/stropts.h>. We don't want to include
all the STREAMS stuff if it's not needed, so we just define INFTIM here.
This is the standard value, but there's no guarantee it is -1. */
#ifndef INFTIM
#define INFTIM (-1) /* infinite poll timeout */
#ifdef HAVE_POLL_H
#define INFTIM_UNPH /* tell unpxti.h we defined it */
#endif
#endif
/* Following could be derived from SOMAXCONN in <sys/socket.h>, but many
kernels still #define it as 5, while actually supporting many more */
#define LISTENQ 1024 /* 2nd argument to listen () */
/* Miscellaneous constants */
#define MAXLINE 4096 /* max text line length */
#define BUFFSIZE 8192 /* buffer size for reads and writes */
/* Define some port number that can be used for our examples */
#define SERV_PORT 9877 /* TCP and UDP */
#define SERV_PORT_STR "9877" /* TCP and UDP */
#define UNIXSTR_PATH "/tmp/unix.str" /* Unix domain stream */
#define UNIXDG_PATH "/tmp/unix.dg" /* Unix domain datagram */
/* Following shortens all the typecasts of pointer arguments: */
#define SA struct sockaddr
#define HAVE_STRUCT_SOCKADDR_STORAGE
#ifndef HAVE_STRUCT_SOCKADDR_STORAGE
/*
* RFC 3493: protocol-independent placeholder for socket addresses
*/
#define __SS_MAXSIZE 128
#define __SS_ALIGNSIZE (sizeof(int64_t))
#ifdef HAVE_SOCKADDR_SA_LEN
#define __SS_PAD1SIZE (__SS_ALIGNSIZE - sizeof(u_char) - sizeof(sa_family_t))
#else
#define __SS_PAD1SIZE (__SS_ALIGNSIZE - sizeof(sa_family_t))
#endif
#define __SS_PAD2SIZE (__SS_MAXSIZE - 2*__SS_ALIGNSIZE)
struct sockaddr_storage {
#ifdef HAVE_SOCKADDR_SA_LEN
u_char ss_len;
#endif
sa_family_t ss_family;
char __ss_pad1[__SS_PAD1SIZE];
int64_t __ss_align;
char __ss_pad2[__SS_PAD2SIZE];
};
#endif
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
/* default file access permissions for new files */
#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
/* default permissions for new directories */
typedef void Sigfunc (int); /* for signal handlers */
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) > (b) ? (a) : (b))
#ifndef HAVE_ADDRINFO_STRUCT
# include "../lib/addrinfo.h"
#endif
#ifndef HAVE_IF_NAMEINDEX_STRUCT
struct if_nameindex {
unsigned int if_index; /* 1, 2, ... */
char *if_name; /* null-terminated name: "le0", ... */
};
#endif
#ifndef HAVE_TIMESPEC_STRUCT
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* and nanoseconds */
};
#endif
分享到:
相关推荐
总结起来,这个压缩包提供了一套在64位CentOS7系统上进行Unix网络编程的基础,包括关键的头文件`unp.h`,配置文件`config.h`,以及编译好的静态库`libunp.a`。用户可以通过编译和链接这些资源,实现书中的示例代码,...
文件中的源代码可能涵盖了TCP(传输控制协议)和UDP(用户数据报协议)这两种主要的传输层协议。TCP提供面向连接、可靠的数据传输,而UDP则是一种无连接、不可靠的传输方式。理解它们的工作机制和在不同场景下的...
将文件解压到/usr/include/目录下,并根据自己的代码需要,更改unp.h文件中的#include "unp/xxx.c"行,使相应的*.c文件包含在内,别的不做任何更改就可以运行《UNIX网络编程》书里的程序了……
描述中的关键信息是用户需要将"error.c"、"unp.h"和"config.h"这三个文件放到"/usr/include/"目录下。这表明这些文件是编译其他程序时所需的头文件和源代码。在Unix或类Unix系统中,"/usr/include/"目录用于存放系统...
- 修改 `unp.h` 文件中的 `#include "config.h"` 为 `#include <config.h>`。 2. **编译客户端程序**: - 编译时需要包含 `error.o` 文件,以便提供 `err_` 开头的一系列错误处理函数。 #### 七、总结 通过以上...
文章目录Ubuntu《Unix网络编程》环境搭建下载文件解压缩按照README 依次执行修改inet_ntop.c文件添加到共享库目录修改unp.h程序各文件相对位置case1:case 2:编译执行小问题 下载文件 为了方便获取,我上传到了github ...
这包括PRS4VOLZ.EC、&OPR、&UNP(可选)、&OVG、&CUS、&HGO、&NMO、&UCN、&NGO、&CION和&CUS(可选)等文件。对于每个文件,系统会询问是否要拷贝,以及在哪个卷上创建目录,一般回答是&001。 整个初始化过程需要...
#include "unp.h" int main(int argc, char** argv) { int sockfd; // 套接字 struct sockaddr_in servaddr, cliaddr; // IPv4套接字地址 sockfd = Socket(AF_INET, SOCK_DGRAM, 0); // 创建UDP套接字 bzero(&...
#include "unp.h" void str_cli(FILE *fp, int sockfd) { char sendline[MAXLINE], recvline[MAXLINE]; while (fgets(sendline, MAXLINE, fp) != NULL) { Writen(sockfd, sendline, strlen(sendline)); if ...
#include "unp.h" int main(int argc, char** argv) { int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if (argc != 2) err_quit("usage: a.out <IP address>"); if ((sockfd = ...
"unp"标签则进一步确认了这是关于UNIX网络编程的内容。"tar.gz"是UNIX/Linux系统中常用的归档和压缩格式,意味着我们需要使用相应的工具来解压这个文件,例如使用"tar -zxvf unpv13e.tar.gz2"命令。 解压后,我们...
从提供的文件内容来看,这是一份由JP摩根编写的关于美股交通运输与物流行业的冬季会议和管理会议问题手册。手册中包含了为即将参加各类会议的公司管理层准备的针对不同话题的特定问题,以及针对整个行业的更广泛主题...
Unix域协议的实现分散在多个C文件中,如`sys/un.h`定义了`sockaddr_un`结构,`sys/unpcb.h`定义了`unpcb`结构,而`kern/uipc_proto.c`和`kern/uipc_usrreq.c`则包含了主要的函数实现。此外,还有一些与管道(pipe)...
这个项目可能来自于《Unix Network Programming》(通常简称UNP)一书中的示例。 首先,让我们理解UDP回显服务的工作原理:客户端发送数据到服务器,服务器接收到数据后,不做任何处理,直接将数据原封不动地回送给...
这部分内容由于扫描文字识别问题,信息不完整,需要参照实际操作和系统备份盘中的指导文件。 综上所述,Honeywell TPS系统各结点的装载步骤对系统稳定运行至关重要。正确掌握各结点的装载方法不仅能够帮助维护人员...