postfix网络编程

Postfix网络编程的结构:

Tcp/Ip连接:inet_connect.c  inet_listern.c

//src/util/inet_connect.c

/* inet_connect - connect to TCP listener */

int     inet_connect(const char *addr, int block_mode, int timeout);

Postifx 自身封装了地址结构,端口号的信息,

struct addrinfo *res;

struct addrinfo *res0;

int     aierr;

int     sock;

MAI_HOSTADDR_STR hostaddr;

INET_PROTO_INFO *proto_info;

int     found;

先将字符串装换为主机名称和端口号,并释放字符串,再将其转换为sockaddr,程序中有许多safety 或者sanity check

/*

* Safety net.

*/

if (strchr((char *) proto_info->sa_family_list, res->ai_family) == 0) {

msg_info("skipping address family %d for host %s",

res->ai_family, host);

continue;

}

----进行sock连接:

if ((sock = inet_connect_one(res, block_mode, timeout)) < 0) {

if (msg_verbose)

msg_info("%m");

} else

break;

}

static int inet_connect_one(struct addrinfo * res, int block_mode, int timeout);

调用set_inet_windowsize设置发送和接收的缓冲区大小,定义了 inet_windowsize 设置这一个大小。

调用timed_connect 设置deadline。

if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (void *) &windowsize,

sizeof(windowsize)) < 0)

msg_warn("setsockopt SO_SNDBUF %d: %m", windowsize);

if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (void *) &windowsize,

sizeof(windowsize)) < 0)

msg_warn("setsockopt SO_RCVBUF %d: %m", windowsize);

Unix 域连接:Unix_connect.c unix_listern.c

触发式客户端:inet_trigger.c、unix_trigger.c、fifo_trigger.c

int     inet_trigger(const char *service, const char *buf, ssize_t len, int timeout);

----通过inet_connect进行连接。

/*

* Connect...

*/

if ((fd = inet_connect(service, BLOCKING, timeout)) < 0) {

if (msg_verbose)

msg_warn("%s: connect to %s: %m", myname, service);

return (-1);

}

close_on_exec(fd, CLOSE_ON_EXEC);

ip = (struct inet_trigger *) mymalloc(sizeof(*ip));

ip->fd = fd;

ip->service = mystrdup(service);

/*

* Write the request...

*/

if (write_buf(fd, buf, len, timeout) < 0

|| write_buf(fd, "", 1, timeout) < 0)

if (msg_verbose)

msg_warn("%s: write to %s: %m", myname, service);

安排一个时间事件,在此时间事件inet_trigger_event中执行close。即不进行“会话”,在一个限定时间内关闭连接。每隔一段时间执行event_loop,执行其中的事件。

/*

* Wakeup when the peer disconnects, or when we lose patience.

*/

if (timeout > 0)

event_request_timer(inet_trigger_event, (void *) ip, timeout + 100);

event_enable_read(fd, inet_trigger_event, (void *) ip);

return (0);

时间: 2024-10-03 13:46:57

postfix网络编程的相关文章

[C# 网络编程系列]专题十:实现简单的邮件收发器

转自:http://www.cnblogs.com/zhili/archive/2012/09/24/2689892.html 引言: 在我们的平常工作中,邮件的发送和接收应该是我们经常要使用到的功能的.因此知道电子邮件的应用程序的原理也是非常有必要的,在这一个专题中将介绍电子邮件应用程序的原理.电子邮件应用程序中涉及的协议和实现一个简答的电子邮件收发器程序. 一.邮件应用程序基本知识 1.1 电子邮件原理及相关协议 说到电子邮件的原理,其实和我们现实生活中寄邮件和寄包裹是一样的原理的.就让我们

20155208徐子涵 实验五 网络编程与安全

20155208徐子涵 实验五 网络编程与安全 实验一 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java 上传测试代码运行结果截图和码云链接 产品代码 1 import java.util.StringTokenizer; 2 import java.util.Stack; 3

2017-2018-2 20165315 实验五《网络编程与安全》实验报告

2017-2018-2 20165315 实验五<网络编程与安全>实验报告 一.实验过程及结果截图 任务一: 两人一组结对编程: 参考博客 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java MyDC.java 示例代码: 1 import java.util.StringTokenizer; 2 import java.util.Stack; 3 4 public class MyDC 5 { 6 /*

2017-2018-2 20165318 实验五《网络编程与安全》实验报告

2017-2018-2 20165318 实验五<网络编程与安全>实验报告 一.实验报告封面 课程:Java程序设计        班级:1653班        姓名:孙晓暄        学号:20165318 指导教师:娄嘉鹏                          实验日期:2018年5月28日 实验时间:13:45 - 3:25                实验序号:实验五 实验名称:网络编程与安全 二.实验内容及步骤 目录 任务一 任务二 任务三 任务四 任务五 实验体

2017-2018-2 20165205 实验五《网络编程与安全》实验报告

实验内容 实验五 网络编程与安全-1 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java 上传测试代码运行结果截图和码云链接 首先实现MyBC.java(后缀转中缀) public class MyBC { public static String toPostfix(String

2017-2018-2 20165211 实验五《网络编程与安全》实验报告

实验三 敏捷开发与XP实践 课程:JAVA程序设计 班级:1652班 姓名:丁奕 学号:20165211 指导教师:娄嘉鹏 实验日期:2018.5.28 实验名称:网络编程与安全 具体实验步骤及问题 (一)网络编程与安全-1 实验要求 参考2016-2017-2 <Java 程序设计>课堂实践项目 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java 知识点 栈:栈 (Stack)是一种只允许在表尾插入和删

实验五 网络编程与安全-----实验报告

一.实验五 网络编程与安全-1 1.实验要求: 两人一组结对编程: (1)参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA : (2)结对实现中缀表达式转后缀表达式的功能 MyBC.java: (3)结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java: (4)上传测试代码运行结果截图和码云链接: 2.实验过程: (1)MyDC代码: import java.util.*; public class MyDC

20175234 2018-2019-2 实验五 网络编程与安全

目录 20175234 2018-2019-2 实验五 网络编程与安全 任务一 任务二 任务三 任务四 任务五 码云链接 参考资料 20175234 2018-2019-2 实验五 网络编程与安全 任务一 题目 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java 实验内容: 1.熟悉栈的应用 Stac

C#网络编程技术FastSocket实战项目演练

一.FastSocket课程介绍 .NET框架虽然微软提供了socket通信的类库,但是还有很多事情要自己处理,比如TCP协议需要处理分包.组包.粘包.维护连接列表等,UDP协议需要处理丢包.乱序,而且对于多连接并发,还要自己处理多线程等等.本期分享课程阿笨给大家带来的是来源于github开源Socket通信中间件:FastSocket,目的就是把大家从繁琐的网络编程技术中彻底地解放和释放出来. 阿笨只想安安静静的学习下网络编程技术Socket后,将学习的成果直接灵活的运用到自己的实际项目中去.