zoukankan      html  css  js  c++  java
  • 网络编程时需要注意的情况

      在TCP客户和服务器彼此可以通信之前,每一端都应指定连接的套接字对;本地IP地址、本地端口号、外地IP地址、外地端口号。如下图:

    外地IP地址和外地端口号必须在客户调用connect时指定。而两个本地值通常都由内核作为connect的一部分来选定。客户也可以在connect之前,通过调用bind来指定其中的一个或全部数值。但做饭并不常见。客户可以在连接建立后调用getsockname获取由内核指定的两个本地值。

      本地端口(服务器众所周知端口)由bind指定。bind调用中服务器指定的本地IP地址通常是通配IP地址。如果服务器在一个多宿主机上绑定通配IP地址,那么它可以在连接建立后通过调用getsockname来确定本地IP地址。两个外地值则有accept调用返回给服务器。如果另外一个程序由调用accept的服务器通过调用exec来执行,那么这个新程序可以在必要时调用getpeername来确定客户端的IP地址和端口号。

    网络编程时,需要注意的三种情况:
    1、当调用fork产生子进程时,必须捕捉SIGCHLD信号。
    2、当捕捉信号时,必须处理被中断的系统调用。例如调用accept时,判断在返回值为-1并且errno被设置为EINTR的情况下,要重新启用accept。
    3、SIGCHLD的信号处理函数必须正确编写,使用waitpid函数避免留下僵尸进程。

  • 相关阅读:
    Pyhont 高阶函数
    Python 函数式编程
    Python 递归函数
    Python 函数的参数定义
    Lniux学习-AWK使用
    Windows10 下 VirtualBox6 中 Centos8 无法安装"增强功能"
    Linux学习-Shell-系统启动过程与执行方式
    接口测试-工具介绍
    Linux学习-Sed 命令
    Linux学习-命令行参数、函数
  • 原文地址:https://www.cnblogs.com/rabbit0212/p/11162800.html
Copyright © 2011-2022 走看看