unix网络编程笔记

端口是TCP/IP协议用来标识不同服务或进程的, TCP/IP协议只有一套,这包括了层层的硬件软件但端口只是个标识,不是硬件存在(区别于接口)它是由TCP/IP协议分配的
例如80端口是邮件服务,那么 所有连接到80端口的用户都“共享”80端口只是分配了不同的套接字。
所以端口是很经用的,固定的;套接口是不停分配的
在你的服务器主机上,端口只用指定一个,以后就都是这个 每连接一个用户创建一个套接口 ,也就是说:在一个端口上存在多个套接口
而对客户端来说,如果你想在客户机上连接两个用户,那你就必须指定两个端口,以区别这两个用户。

1,“信号是软件中断。很多比较重要的应用程序都需要处理信号。信号提供了一种处理异步时间的方法”             ——《APUE》
在服务器子进程终止时会给父进程发送一个SIGCHLD信号,用来返回一些子进程结束的信息,若父进程不处理则子进程进入“僵死“状态,继续占用资源。(设置“僵死"状态的目的是维护子进程的信息,以便父进程在以后某个时候获取。)

2,服务器主进程调用signal 函数 (里面调用wait/waitpid,返回终止进程ID和终止状态。正如他们名字所示,若调用他们时无终止进程则一直阻塞到出现,所以把它们放在由中断触发的signal函数里。)处理信号(信号产生时自动触发)

3,"既然该信号是父进程阻塞于”慢系统调用accept“时捕获的,内核于是致使accept返回一个EINTR(被中断的系统调用)错误。而父进程在调用accept时没考虑这个错误返回值,于是终止。"
     即由中断信号产生了两个问题需要处理:SIGCHLD信号和被中断的系统调用。

4,服务器进程终止,TCP/IP协议还没挂。作为进程终止的一部分,打开的所有描述字都被关闭,协议向客户端发送一个FIN,客户TCP响应一个ACK。
     SIGCHLD信号被发送给父进程并正确处理。
     客户机上没发生任何特殊之事,因为客户TCP接收到FIN只是表示服务器进程已关闭了连接的服 务器端,从而不再往其中发送任何数据而已。FIN的接受并没有告知客户TCP服务器已经终止。
     客户进程仍阻塞在fgets上等待用户输入。输入完之后返回服务器已终止。即无法立即得知服务器状况。(select和poll)

5,服务器主机崩溃,TCP也挂了。FIN也懒得发了。客户机全然不知啊!服务器瞬间消失!
     先不说用户阻塞与fgets,既是你输入了一行文字,由于服务器TCP断开,客户TCP不断尝试重传,约9分钟才放弃!!
     5.1:给readline设置一个超时
     5.2:套接口选项

6,服务器主机关机。系统会给所有进程发送一个SIGTERM--SIGKILL信号,等进程慢慢的结束,所以情况和4服务器进程终止差不多

7,IO复用。select/poll函数的作用是:内核一旦发现晋城指定的一个或多个IO条件就绪(即fd准备好了没有或出了什么问题),他就立即通知进程。这个能力称为I/O复用。阻塞型函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值