socket 206 class info

来源:互联网 发布:网络的服务 编辑:程序博客网 时间:2024/04/20 17:58
收尸方法总结

常规办法,父进程主动调用 wait()/waitpid() ,父进程会阻塞
轮询方式,父进程循环调用 waitpid() , options 设为 WNOHANG ,如果没有子进程
退出,则会得到状态,如果有子进程退出,也会得到状态。
信号触发方式,父进程注册一个 SIGCHLD 信号的处理函数,当子进程终止时,会有
一个信号发送给父进程,此时父进程注册的信号处理函数被自动调用,在该函数内,
可以调用 wait() 进行收尸。

转嫁方式,父进程调用一次 fork ,产生的子进程再次调用 fork() ,在孙子进程内执行
相应的工作,儿子进程调用完 fork() 之后自我终止,造成孙子进程被 init 进程收养,
孙子进程的收尸最终由 init 完成。

该办法不是很稳妥,当有多个子进程同时终止时,很可能只做一次 wait() ,造成
对其他的子进程不做 wait() ,形成僵尸进程。
这种方式比较稳妥,因为 init 进程设计上就确保能够为终止的子进程收尸。
自动收尸,在父进程中将 SIGCHLD 信号的处理方式通过 sigaction() 调用设为忽略
(SIG_IGN) ,当子进程终止时,自动进行收尸,不通知父进程。

这种方式依赖于实现,不建议使用。



roadcast programming

广播接收程序可以使用普通的 udp server 程序

运行一个 udp server 程序,绑定 0.0.0.0:8000 地
址,看看能否收到其他人发送的广播数据
测试方法

测试向受限广播地址(绝对广播地
址) 255.255.255.255 发送数据
测试向子网广播地址 192.168.206.255 发送数据


Multicast programming
Source code:

运行方法:

$ ./multicast_receiver 0.0.0.0 8000 226.0.0.0 <your ip
address>
测试方法:

使用普通的 udp 发送程序发送数据到 226.0.0.0:8000 端口
检查加入多播组的情况,可以使用如下的命令行

$ netstat -g


nc 工具

nc 作为 TCP 客户端,测试 TCP 服务器

nc 作为 TCP 服务器端,测试 TCP 客户端

$ nc -l <ip> <port>
nc 作为 UDP 客户端,测试 UDP 服务器

$ nc <ip> <port>
$ nc -u <ip> <port>
nc 作为 UDP 服务器端,测试 UDP 客户端

$ nc -u -l <ip> <port>






原创粉丝点击